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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM