日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winform中设置BackgroundWorker在取消时关闭后台进程

發布時間:2025/3/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Winform中设置BackgroundWorker在取消时关闭后台进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

在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;}

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Winform中设置BackgroundWorker在取消时关闭后台进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。