在winform中拖拽 一个backgroundworker控件,配合进度条控件能开启一个后台线程并报告进度条进度。
但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行。
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
将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; }
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
浅谈Visual Studio 2019 Vue项目的目录结构
网友评论