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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环

發(fā)布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

場景

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。