iT邦幫忙

DAY 17
2

我的.Net之路系列 第 17

停止自我呼叫的BackGroundWorker

  • 分享至 

  • xImage
  •  

BackGroundWorker是個滿簡單的多執行緒元件,很多人會透過RunWorkerCompleted事件再度呼叫RunWorkerAsync()方法讓它不斷循環,頭痛的是,如果要中斷一個這種的BackGroundWorker該怎麼做?
這問題在我剛開始寫.Net程式時曾經困擾過我一陣子,第一:那時我還看不懂MSDN文件庫、第二:我手上的書對這個的描述幾乎都是錯的。
說穿了這個程序很簡單,共有四個步驟:
(1)
將BackgroundWorker的WorkerSupportsCancellation屬性設為True,
表示此BackgroundWorker物件可以支援取消作業的動作﹝也就是使它可以呼叫CancelAsync方法﹞。

(2)
在某一個特定事件中呼叫BackgroundWorker的CancelAsync方法﹝例如寫在某一個Button物件的Click事件中﹞。

(3)
在DoWork事件的程序中必要的位置建立檢查CancellationPending 屬性值的程序
﹝當BackgroundWorker的CancelAsync方法被呼叫後,這個值將會成為True﹞,
並在此一屬性值轉為True時將傳入DoWork事件的DoWorkEventArgs的Cancel屬性值設為True。

(4)
在BackgroundWorker的RunWorkerCompleted事件中檢查傳入此事件的RunWorkerCompletedEventArgs的Cancelled屬性值
﹝這個值就是由(3)所描述的System.ComponentModel.DoWorkEventArgs的Cancel屬性值傳進來的﹞,
當這個值為Fasle則呼叫RunWorkerAsync方法重新引發DoWork事件重新開始一個新的背景執行緒;若為True則不再繼續。


上一篇
.NET中的陣列宣告
下一篇
抽象類別
系列文
我的.Net之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言