在我的計劃,將有一段時間,我都打電話如何恢復/中斷的BackgroundWorker線程
Thread.Sleep(Timeout.Infinite);
爲「暫時停止」 BackgroundWorker的。在背景工作者線程睡眠之前將顯示一個組框。該groupbox有一個按鈕,應該喚醒backgroundworker線程並繼續它。
如果我調用了Thread.interrupt()(其中的方式,我似乎無法使用,除非我創建一個Thread對象,我不應該這樣做)在button_Click事件,如:
private void button1_Click(object sender, EventArgs e)
{
Thread.Interrupt(); //interrupt thread
}
它會「中斷」的線程是UI線程,對嗎?我需要做的是中斷BackgroundWorker線程。我該怎麼做呢?
編輯:感謝那些回答了這個問題。我將使用AutoResetEvent。似乎更適合我的使用。
謝謝你的回覆。所以我應該使用這個ManualResetEvent而不是Thread.Sleep();? –
是的 - 您在示例中調用Thread.Sleep的位置將其替換爲您在ManualResetEvent上對WaitOne的調用。然後在按鈕處理程序中調用ManualResetEvent的Set以釋放線程。您可能還想考慮AutoResetEvent是否更適合您的需求(即當等待的線程已被釋放時,它會自動重置爲無信號狀態) – IanR
信號量NirMH發佈真的很有幫助。那與ManualResetEvent有什麼不同?看起來他們使用的是相同的。在這種情況下哪個更好? –