我想優雅地停止無處不在的循環線程,無論何時單擊按鈕時運行。以下是據我所知應該工作:C#:Thread.Join()凍結UI
bool running = true;
private Thread myThread = new Thread(new ThreadStart(threadWorker));
private void threadWorker()
{
while(running)
{
...
}
}
private void button_click(object sender, EventArgs e)
{
running = false
myThread.Join();
...
}
但是,單擊按鈕凍結UI線程。暫停程序調試顯示它停留在Thread.Join()。如果我將「運行」標誌放在一個單獨的按鈕上並在加入之前單擊它,那麼它可以正常工作,但這種方式就好像該標誌永不改變,方法永遠不會結束。
我在做什麼錯?
編輯:這個問題不是「爲什麼在啓動/停止線程後CPU使用率不斷增加?」,將「volatile」添加到標誌聲明並不能解決問題。
在我的情況下,程序凍結了UI更新調用(感謝usr告訴我我可以檢查其他線程正在做什麼)。用Control.BeginInvoke
代替Control.Invoke
解決了這個問題。
你有沒有試過調試你的工作循環? – AntiHeadshot
我在這方面很新穎,究竟如何進行調試工作?我正在使用Visual Studio 2015社區。 「凍結所有」在凍結時顯示它被卡在myThread.Join()上,並且「運行」標誌爲false,因爲它應該是這樣。 –
@ Ihavenoideawhat我正在使用線程窗口切換到另一個線程。它很忙,不會退出。這就是Join沒有完成的原因。 – usr