2010-08-02 114 views
1

我正在開發C#.NET窗體窗體應用程序。其中我有一個主窗口和其他幾個窗口窗體類(用作對話框)。我有一個計算密集型任務(需要3-4分鐘)。當用戶從菜單中選擇這個任務時,會彈出一個新的對話框(窗口)並從用戶那裏獲取所需的參數,並且它有一個顯示任務進度的進度條。我在這個對話框中使用BackgroundWorker來執行計算和報告進度。此BackgroundWorker還將所有中間值寫入名爲status.log的日誌文件。BackgroundWorker線程何時被殺死?

問題是,當用戶關閉此對話框時,需要關閉日誌文件。我猜與這個對象關聯的BackgroundWorker也會被破壞。所以,我已經編寫了這個對話框的FormClosed事件的處理程序,並關閉了該文件。但似乎BackgroundWorker並沒有被殺死。我的意思是,BackgroundWorker現在拋出異常,文件關閉&無法寫入已關閉的流。

如何處理這種情況?什麼時候應該關閉文件流? BackgroundWorker線程什麼時候被殺死?

回答

1

後臺工作線程不會被殺死:它們返回到線程池。

處理RunWorkerCompleted事件。

更新:回覆您的評論:在表單的關閉事件中,指示後臺工作者取消。看到接受的答案.NET: How to wait for a BackgroundWorker to cancel?

+0

我不是在談論任務完成的情況。我已經處理了「RunWorkerCompleted」事件。我正在談論用戶(突然)在計算過程中關閉對話框的情況。然後我也需要關閉文件,因爲如果我再次啓動對話框,它會抱怨文件被其他進程使用。 – claws 2010-08-02 03:46:50