Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环
場景
Winform中設(shè)置BackgroundWorker在取消時關(guān)閉后臺進程:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103254728
在以上流程中取消后臺BackgroundWorker時如果是正常流程時會生效,但是會遇到以上情況
就是執(zhí)行到了DoWork的方法中的循環(huán)時,此循環(huán)執(zhí)行時間很長,往往取消了后還會將當(dāng)前循環(huán)執(zhí)行完。
所以為了徹底取消執(zhí)行,應(yīng)該在循環(huán)中就執(zhí)行是否取消的檢測,進而跳出循環(huán)或者說直接結(jié)束當(dāng)前方法。
注:
博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費下載。
實現(xiàn)
比如在下面的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 = "已取消導(dǎo)出";result =? false;return;}if (e.Cancel){errMsg = "已取消導(dǎo)出";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);}雖然已經(jīng)添加了是否已經(jīng)取消的處理,但是在此方法中還有調(diào)用別的方法exportExcelAll,在別的方法exportExcelAll中有執(zhí)行的循環(huán)的操作。
所以要在當(dāng)前方法中將sender 和e 作為參數(shù)傳遞給調(diào)用的方法。
同時在方法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 = "已取消導(dǎo)出";return false;}if (e.Cancel){errMsg = "已取消導(dǎo)出";return false;}.....for (int i = 0; i < excelTotalCount; i++){//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;}}同理如果在exportExcelAll中有調(diào)用的其他的方法和循環(huán)也要添加是否取消的處理。
然后在方法的循環(huán)中添加對取消的處理。
因為為了防止后臺繼續(xù)執(zhí)行,即為了不讓其執(zhí)行類似于循環(huán)這樣的操作,所以應(yīng)該在循環(huán)中進行監(jiān)控是否取消。進而結(jié)束當(dāng)前循環(huán)或者結(jié)束當(dāng)前方法,一般是return? 或者return false。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ionic中自定义公共模块以及在自定义模
- 下一篇: Electron中常用api事件-app