場景
在Winform中拖拽 一個BackgroundWorker控制元件,配合進度條控制元件能開啟一個后臺執行緒并報告進度條進度,
但是在執行后臺執行緒的任務時,如果想要取消,怎樣讓其停止執行,
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載,
實作
設定可取消為true
將BackgroundWorker控制元件的WorkerSupportsCancellation屬性設定為true,

這里是直接通過控制元件設定屬性的方式,如果是直接宣告的物件,則可以通過物件.屬性去設定,
如果不設定則會提示:此BackgroundWorker宣告它不支持取消,,,

發起取消后臺操作的請求
在上面允許取消后,在取消按鈕的點擊事件中發起取消后臺操作的請求,
this.backgroundWorker1.CancelAsync();
完整示例代碼
private void btnCancel_Click(object sender, EventArgs e) { this.backgroundWorker1.CancelAsync(); this.DialogResult = DialogResult.Cancel; this.Close(); }
真正取消后臺操作
上面發起取消后臺操作的請求后,并不會真正關閉后臺行程,只是報告要取消后臺行程,
如果要執行的操作是一個回圈則會一直回圈完,
在進行后臺具體執行的操作時是這樣系結的
this.backgroundWorker1.DoWork += backgroundWorker1_DoWork; //觸發事件 this.backgroundWorker1.RunWorkerAsync();
所以要在具體執行后臺操作的方法 backgroundWorker1_DoWork中去進行判斷并終止
在上面進行請求取消操作后,那么BackgroundWorker物件的CancellationPending屬性就為true,
所以在具體執行后臺操作的方法中的回圈操作中
BackgroundWorker bgWorker = sender as BackgroundWorker; if ((bgWorker.CancellationPending == true)) { e.Cancel = true; errMsg = "已取消匯出"; return false; } if (e.Cancel) { errMsg = "已取消匯出"; return false; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/100039.html
標籤:C#
上一篇:c# 發送郵箱,企業郵箱測驗成功
下一篇:c# 例外精準定位
