当前位置: 移动技术网 > IT编程>开发语言>c# > Winform中设置BackgroundWorker在取消时关闭后台进程

Winform中设置BackgroundWorker在取消时关闭后台进程

2019年11月26日  | 移动技术网IT编程  | 我要评论

场景

在winform中拖拽 一个backgroundworker控件,配合进度条控件能开启一个后台线程并报告进度条进度。

但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行。

注:

博客主页:

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

设置可取消为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;
                }

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网