static void HandleError( string s )
{
string fullLogFilePath = null;
Exception errorWhileWritingFile = null;
// Atomically captures the LogPath to use.
string logPath = _logPath;
if( logPath != null )
{
try
{
fullLogFilePath = FileUtil.WriteUniqueTimedFile( logPath + SubDirectoryName, ".txt", DateTime.UtcNow, Encoding.UTF8.GetBytes( s ), true );
}
catch( Exception ex )
{
errorWhileWritingFile = ex;
}
}
var h = OnError;
if( h != null )
{
LowLevelErrorEventArgs e = new LowLevelErrorEventArgs( s, fullLogFilePath, errorWhileWritingFile );
// h.GetInvocationList() creates an independent copy of Delegate[].
foreach( EventHandler<LowLevelErrorEventArgs> d in h.GetInvocationList() )
{
try
{
d( null, e );
}
catch( Exception ex )
{
OnError -= (EventHandler<LowLevelErrorEventArgs>)d;
ActivityMonitor.CriticalErrorCollector.Add( ex, "While raising SystemActivityMonitor.OnError event." );
}
}
}
}