Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环
場景
Winform中設置BackgroundWorker在取消時關閉后臺進程:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103254728
在以上流程中取消后臺BackgroundWorker時如果是正常流程時會生效,但是會遇到以上情況
就是執行到了DoWork的方法中的循環時,此循環執行時間很長,往往取消了后還會將當前循環執行完。
所以為了徹底取消執行,應該在循環中就執行是否取消的檢測,進而跳出循環或者說直接結束當前方法。
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
比如在下面的DoWork方法中
????? private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){string errMsg = String.Empty;bool result = false;BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消導出";result =? false;return;}if (e.Cancel){errMsg = "已取消導出";result = false;return;}.....if (this.radioButtonAll.Checked){ExportExcelHelper excleHelper = new ExportExcelHelper();result = excleHelper.exportExcelAll(this.pathTextBox.Text, this.nameTextBox.Text, sender, e, this.checkEdit_Autx.Checked, this.checkEdit_Bms.Checked, out errMsg, AutxDecimalNum, AuvxDecimalNum, BmsDecimalNum);}雖然已經添加了是否已經取消的處理,但是在此方法中還有調用別的方法exportExcelAll,在別的方法exportExcelAll中有執行的循環的操作。
所以要在當前方法中將sender 和e 作為參數傳遞給調用的方法。
同時在方法exportExcelAll的最前面也要加上是否取消的處理
??????? public bool exportExcelAll(String filePath, String fileName, object sender, DoWorkEventArgs e, Boolean needAuxRecord, Boolean needBmsRecord, out string errMsg, int autxDecimalNum, int auvxDecimallNum, int bmsDecimalNum){BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消導出";return false;}if (e.Cancel){errMsg = "已取消導出";return false;}.....for (int i = 0; i < excelTotalCount; i++){//BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消導出";return false;}if (e.Cancel){errMsg = "已取消導出";return false;}}同理如果在exportExcelAll中有調用的其他的方法和循環也要添加是否取消的處理。
然后在方法的循環中添加對取消的處理。
因為為了防止后臺繼續執行,即為了不讓其執行類似于循環這樣的操作,所以應該在循環中進行監控是否取消。進而結束當前循環或者結束當前方法,一般是return? 或者return false。
?
?
?
總結
以上是生活随笔為你收集整理的Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ionic中自定义公共模块以及在自定义模
- 下一篇: C#中使用MoveTo和Path.Cha