1

作成しているプログラムにログファイルを追加しようとしていますが、メインスレッドに(を使用してApplication.ExitThread())終了するように指示すると、logstrmWriterそこに到達する前に突然nullになります。これは非常に単純なスクリプトです。

private static FileStream appLogStream;
internal static string logFile;
internal static StreamWriter logstrmWriter;
public static void Main()
{    
    logFile = Application.StartupPath + @"\Archiver.log";
    appLogStream = new FileStream(logFile, FileMode.Append, FileAccess.Write, FileShare.Read);
    TextWriter logtxtWriter = Console.Out;
    StreamWriter logstrmWriter = new StreamWriter(appLogStream);
    if(!console) Console.SetOut(logstrmWriter);

    Application.ApplicationExit += new EventHandler(OnApplicationExit);
    Application.Run();
}
internal static void OnApplicationExit(object sender, EventArgs e)
{
    active = false; Console.WriteLine("Main thread is shutting down. Sending Interrupt...");
    Archiver.Stop(); Console.WriteLine("Shutdown. Log and Exit");
    Console.WriteLine();
    logstrmWriter.Flush();
    logstrmWriter.Close();
    logstrmWriter.Dispose();
}
4

1 に答える 1

2

問題の静的変数を非表示にするローカル変数を作成しています。そのため、初期化することはありませんlogstrmWriter

TextWriter logtxtWriter = Console.Out;
/* StreamWriter */ logstrmWriter = new StreamWriter(appLogStream);  // Remove the redeclaration here!
if(!console) Console.SetOut(logstrmWriter);
于 2012-06-05T23:42:25.387 に答える