2010-09-28 33 views
3

我有一個程序有兩種模式:GUI & Just Run。 GUI加載一個WPF表單並讓我調整設置,而Just Run加載所述設置並且只是...好了...運行。真正完成之前的程序關閉

這是一個榮耀的,可定製的工具,批量移動文件。

問題:「日誌」沒有完成。看起來程序關閉時它仍在寫入,從而切斷了日誌的結束。

主要應用體:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     if (!e.Args.Contains("-gui")) 
     { 
      Process.SettingsPopulate(); 
      Process.WriteLogHead(); 
      Process.MoveFiles(); 
      Process.WriteLogEnd(); 
     } 
     else 
     { 
      new MainWindow().ShowDialog(); 
     } 
     this.Shutdown(); 
    } 
} 

真正簡單。如果命令行有-gui,它會加載WPF ...否則它只會運行。

public static void WriteLogEnd() 
    { 
     foreach (var log in from i in Items 
          where i.Used == false 
          let build = new StringBuilder() 
          select build.AppendFormat("{0, -12} > {1} > Not Found", _time, i.FileName)) 
     { 
      Logs(log); 
     } 

     Logs(""); 
     Logs("Fin."); 
    } 

日誌是一個簡單的「寫入控制檯,寫入文件」方法。我迭代通過我的處理文件列表,找到不使用的項目...又名「找不到」。在它結束清單之前,寫Fin,它關閉。

讓我困惑。如何在WriteLogEnd結束之前停止關閉文件(因爲,afaik,它應該無法在此之前結束)。

+0

有沒有線程在使用? – PostMan 2010-09-28 21:05:43

+0

沒有線程。我將編輯添加寫入方法,就像我再次接近代碼時一樣lol – WernerCD 2010-09-28 22:42:49

回答

2

日誌是一個簡單的「寫入控制檯,寫入文件」的方法。

如果它寫到文件,添加一個Logs.Close()什麼的。您必須關閉FileStream以刷新其緩存。

+0

不會在應用程序的退出時刷新嗎? – PostMan 2010-09-28 21:37:01

+0

@ Postman:不,沒有保證。 – 2010-09-28 21:47:32

+0

Hrm ...不要以爲我在任何地方都有StreamWriter.Close。我必須嘗試,並不認爲它會「沖洗」東西 – WernerCD 2010-09-28 22:47:24

2

它運行在一個調試器命令行模式,看看是否被拋出一個異常,或者把周圍的代碼在try..catch在OnStartup程序。

如果一個異常中的過程的任何線程變爲未處理的,整個過程被突然終止。

另外,還要確保你正在關閉的任何文件或流的是你正在寫的日誌。大多數文件I/O現在都被緩衝了,如果你沒有正確地關閉數據流,那麼最後一個緩衝區的數據可能不會被提交給輸出設備。

相關問題