2012-09-12 93 views
2

從這裏Does closing the application stops all active BackgroundWorkers?它似乎不是。用戶關閉表單時,是否必須關閉正在運行的BackgroundWorkers?

但是從這裏How to stop BackgroundWorker on Form's Closing event?它似乎是的。

那它是哪一個呢?

(編輯:?我意識到BackgroundWorker S可能會發生與異常退出,但有什麼用,這個問題是不是問題的關鍵在這裏沒有留下運行的佔用資源線程)

+1

@Rhhound你是否看到誰回答了我提到的第二個問題?我不會輕視(或不輕忽)忽視他所說的話。 – ispiro

回答

4

關閉Form確實不是停止所有由該表單開始的後臺工作。

當整個應用程序結束它停止所有後臺線程。

關閉主窗體(除非您修改了Main方法來執行其他操作)將終止整個應用程序。

你引用的每個問題對於它所說的都是正確的。如果關閉主窗體,則整個應用程序將結束,後臺工作人員將自行關閉。如果正在關閉的表單不是主表單,而是一些其他表單,並且您希望後臺工作器開始停止,那麼您將需要自行完成。

還值得注意的是,您提供的second link要求更復雜一些。在那篇文章中很明顯,關閉表單(如果它是主表單)將會停止執行後臺線程。 OP想要做的是告訴後臺線程,「嘿,是時候完成了,我們完成了」,然後讓表單等待,直到後臺線程可以完成清理工作,而不僅僅是當它正在做某事時,退出並強行中止線程。

+0

所以你說漢斯的答案是指一種不是主要形式的形式? – ispiro

+0

它也適用於主窗體。 –

+0

@HenkHolterman如果BackgroundWorkers以異常結束,那又有什麼關係?這有什麼問題嗎? – ispiro

1

這兩項的您提供的鏈接有正確的答案 - BackgroundWorker s將在程序關閉時關閉。 非託管資源是您不得不擔心明確關閉的資源。

+0

所以[Hans](http://stackoverflow.com/a/1732361/939213)是說他說什麼,因爲只有非託管代碼? – ispiro

+1

@ispiro - 你的問題到底是什麼。這兩個問題都不涉及非託管資源。 –