2010-02-05 176 views
2

我有一個簡單的程序,它擁有backgroundworkers,並且它不停地運行,無論何時關閉它,它總會有一些仍在運行(或全部),並且我注意到關閉應用程序並沒有「完全殺死它。運行一段時間後,Windows任務管理器的進程選項卡上仍有進程(每次運行1個進程)。Backgroundworker線程不關閉程序關閉?

他們爲什麼還留着?我爲他們做什麼不是?

ps .:我已經在應用程序關閉時閱讀了關於背景工作者行爲的問題,但我想這不是按照預期行事。有什麼建議麼 ?

+0

我要問的細節:你真的單獨使用BackgroundWorker的,或者你還可以創建一些「手冊」的主題?如果是的話,那個手動線程('new Thread()')必須有'IsBackground = true;' – 2010-02-05 10:32:07

+0

我剛剛問過它之前檢查過它,在開始使用backgroundworker之前我使用了正常線程,現在我看看如果我沒有沒有錯過任何仍在代碼中的人,不,沒有任何正常的線程,當我使用它們時,它們是IsBackground = true; – Marcelo 2010-02-05 10:57:17

回答

2

更好的辦法是停止/殺死使用封閉廣告應用程式前一個事件或自定義操作線程。

像如下

private void ButtonStopBGWorker_Click(object sender, RoutedEventArgs e) 
{ 
BackgroundWorker worker = sender as BackgroundWorker; 
if ((worker.CancellationPending == true)) 
    { 
     e.Cancel = true; 
     break; 
    } 
} 

這篇文章at the forum will給你更深入的瞭解。 另外,看看MSDN上有關如何管理Backgroundworker Threads

希望它可以幫助

0

他們是你自己旋轉起來的線程嗎?如果你創建自己的線程,我相信你需要將它們設置爲後臺線程,以使它們與主線程一起終止。否則,他們會保持這個過程的活力。從內存中的代碼來設置特定線程的背景是這樣的:

Thread t = new Thread(YouStartMethod); 
t.IsBackground = true; 
t.Start(); 

希望這有助於

+0

不,他們是背景主題的線程(我不確定我可以這樣說,對不起)我不會自己開始線程。 – Marcelo 2010-02-05 10:42:01