這幾天做項目懶了就用backgroundworker這個控件,覺得它比多線程方便一些,然后這個線程里面在開線程,然后慘劇就發生了:當我打開一個主窗口后,在打開一個子窗口,子窗口里有個backgroundworker,然后我就啟動了這個dowork,然后就開始執行很耗時的操作,閑着無聊,我點了幾下鼠標,一不小心把子窗口給關了,靠,執行了一半的程序,重啟吧,可是還沒等我重新打開,奇跡出現了,程序執行完了,這說明我關閉了窗口,但是backgroundworker還在運行,嗯?這可不行啊,我這么嚴謹的人怎么能出這樣的錯呢,雖然客戶是不會亂點的,好吧,讓我們看看怎么辦-----
正題
經過我測試到現在得出結論
backgroundworker 在你關閉窗體時他不會結束,什么時候結束?是在你的整個application結束,它才結束
this.backgroundWorker1.CancelAsync()這個方法,我覺得很奇怪,它到底該怎么用?
看msdn 調用 CancelAsync 時,輔助方法可以停止其執行並退出。輔助代碼應定期檢查 CancellationPending 屬性,查看是否已將該屬性設置為 true。
這是個什么意思呢?我理解了是不是說調用這個方法時我得先看看CancellationPending是不是true呢,不然就會取消失敗?那這個取消還有個毛用啊,CancellationPending又不是我能控制的,那我想隨時隨地的關掉這個不就無法實現了嗎?那不就等於說這個CancelAsync是無效的嗎?
最后我試了n久還是無法使用ancelAsync這個方法來取消backgroundworker
大神能給解釋嗎?