Winform中设置BackgroundWorker在取消时关闭后台进程
場景
在Winform中拖拽 一個BackgroundWorker控件,配合進(jìn)度條控件能開啟一個后臺線程并報告進(jìn)度條進(jìn)度。
但是在執(zhí)行后臺線程的任務(wù)時,如果想要取消,怎樣讓其停止執(zhí)行。
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費下載。
實現(xiàn)
設(shè)置可取消為true
將BackgroundWorker控件的WorkerSupportsCancellation屬性設(shè)置為true。
?
這里是直接通過控件設(shè)置屬性的方式,如果是直接聲明的對象,則可以通過對象.屬性去設(shè)置。
如果不設(shè)置則會提示:此BackgroundWorker聲明它不支持取消。。。
?
發(fā)起取消后臺操作的請求
在上面允許取消后,在取消按鈕的點擊事件中發(fā)起取消后臺操作的請求。
this.backgroundWorker1.CancelAsync();完整示例代碼
?private void btnCancel_Click(object sender, EventArgs e){this.backgroundWorker1.CancelAsync();this.DialogResult = DialogResult.Cancel;this.Close();}真正取消后臺操作
上面發(fā)起取消后臺操作的請求后,并不會真正關(guān)閉后臺進(jìn)程,只是報告要取消后臺進(jìn)程。
如果要執(zhí)行的操作是一個循環(huán)則會一直循環(huán)完。
在進(jìn)行后臺具體執(zhí)行的操作時是這樣綁定的
this.backgroundWorker1.DoWork += backgroundWorker1_DoWork; //觸發(fā)事件 this.backgroundWorker1.RunWorkerAsync();所以要在具體執(zhí)行后臺操作的方法 backgroundWorker1_DoWork中去進(jìn)行判斷并終止
在上面進(jìn)行請求取消操作后,那么BackgroundWorker對象的CancellationPending屬性就為true。
所以在具體執(zhí)行后臺操作的方法中的循環(huán)操作中
?BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消導(dǎo)出";return false;}if (e.Cancel){errMsg = "已取消導(dǎo)出";return false;}?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Winform中设置BackgroundWorker在取消时关闭后台进程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform中使用DevExpress
- 下一篇: Python中使用cutecharts实