在閱讀了幾篇文章後,我仍然不確定我是否理解了多線程來解決我的特定問題。如何在主窗體中等待工作線程?
我有一個主窗體將啓動一個後臺工作線程(工人)。工作者線程將執行一個While(!Stopping)無限循環,並且將在每次迭代結束時通過全局Stopping對象(只讀鎖對象)終止睡眠。當用戶按下「停止」按鈕時工作正常, 工作人員將在當前迭代後停止。
現在我想要當用戶關閉主窗體時,它會先設置停止標誌,讓工作線程 完成當前的工作。之後,主表單將關閉。似乎很簡單,但我無法使其工作。
我試過了worker.Join(),或者在while循環中測試了woker.IsAlive,但是這兩種情況都會在幾秒後因爲某種原因鎖定應用程序(主窗體)?
以下是我的代碼Form_Closing事件處理中(不工作):
// Tell the thread to stop the file
Stop();
Logger.Info("Stopping the thread by Close the application");
//Not working as well
//worker.Join();
while (worker.IsAlive)
{
Thread.Sleep(5000);
Logger.Info("After sleep for 5 seconds");
}
Logger.Info("worker thread stopped");
一件事有趣的是,工作線程似乎總是寫日誌事件,直到每個循環迭代,那麼剩下的結束日誌條目將在 while(worker.IsAlive)循環內部成爲主窗體事件。
謝謝,這個解決方案似乎運作良好。 – 2010-10-06 21:40:50