backgroundWorker取消后,重新开始就报错:此 BackgroundWorker 当前正忙,无法同时运行多个任务。
使用BackgroundWorker控件,有2个按钮buttonBegin和buttonCancel。
其他都正常,只是在用buttonBegin开始运行,然后点击buttonCancel取消后,到这里都正常。
可当再次点击buttonBegin时,就报错说:
“此 BackgroundWorker 当前正忙,无法同时运行多个任务。”查过资料,说是:this.backgroundWorker1.CancelAsync()只是将CancellationPending设置为true,并没有终止进程。
我现在想做的是,取消后,重新点击buttonBegin会重新运行。
感觉应该在buttonCancel_Click后面增加个终止该backgroundWorker1的方法,可查了半天也没找到。
代码如下:
private void buttonBegin_Click(object sender, EventArgs e)
{
string[] pramlist = { "0"};
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.RunWorkerAsync(pramlist);
} private void buttonCancel_Click(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
buttonCancel.Enabled = false;
} private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
string[] pramlist = (string[])e.Argument;
e.Result = DownLoad(worker, e, pramlist);
} private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
labelMsg.Text = string.Format("下载中{0}%,{1}", e.ProgressPercentage, e.UserState.ToString());
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
labelMsg.Text = "下载被取消!";
}
else
{
this.progressBar1.Value = 0;
labelMsg.Text = bool.Parse(e.Result.ToString()) ? "下载成功!" : "下载失败!";
}
buttonCancel.Enabled = false;
}
private bool DownLoad(BackgroundWorker worker, DoWorkEventArgs e, string[] pramlist)
{
for (int i = 0; i < 100; i++)
{
System.Threading.Thread.Sleep(1000); worker.ReportProgress(i, "下载开始");
}
return true;
}
解决方案 »
- 别用控件,你直接用class,每次用之前new个新的对象即可。
- CancelAsync之后,BackgroundWorker.CancellationPending = true
你要自己处理,具体如下:private bool DownLoad(BackgroundWorker worker, DoWorkEventArgs e, string[] pramlist)
{
for (int i = 0; i < 100; i++)
{
if(worker.CancellationPending)
{
return false;
}
System.Threading.Thread.Sleep(1000); worker.ReportProgress(i, "下载开始");
}
return true;
}
其次Begin加IsBusy判断
private void buttonBegin_Click(object sender, EventArgs e)
{
if(backgroundWorker1.IsBusy)
{
return;
}
string[] pramlist = { "0"}; backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.RunWorkerAsync(pramlist);
} - 需要在DoWork判断是否已经取消了,如果取消了,需要返回
backgroundworker有IsBusy属性,直接检测 报错:此 BackgroundWorker 当前正忙,无法同时运行多个任务
CancelAsync之后,BackgroundWorker.CancellationPending = true
你要自己处理,具体如下:private bool DownLoad(BackgroundWorker worker, DoWorkEventArgs e, string[] pramlist)
{
for (int i = 0; i < 100; i++)
{
if(worker.CancellationPending)
{
return false;
}
System.Threading.Thread.Sleep(1000); worker.ReportProgress(i, "下载开始");
} return true;
}
其次Begin加IsBusy判断
private void buttonBegin_Click(object sender, EventArgs e)
{
if(backgroundWorker1.IsBusy)
{
return;
}
string[] pramlist = { "0"}; backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.RunWorkerAsync(pramlist);
}
backgroundWorker取消后,重新开始就报错:此 BackgroundWorker 当前正忙,无法同时运行多个任务。的更多相关文章
- oracle报错:ORA-00054: 资源正忙,要求指定 NOWAIT
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源: --首先得到被锁对象的session_idselect session_id from v$locked_object; -- ...
- FastDFS整合nginx后,nginx一直报错
FastDFS整合nginx后,nginx一直报错: 报错内容: [2018-06-11 09:41:21] ERROR - file: ../common/fdfs_http_shared.c, l ...
- 普通的jdbc事务在插入数据后 下面的代码报错时 数据不会回滚 但是 spring的事务会回滚
普通的jdbc事务在插入数据后 下面的代码报错时 数据不会回滚 但是 spring的事务会回滚
- Django_重装系统后无法使用 sqlite 数据库报错:com.intellij.execution.ExecutionException: Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
重装系统后无法使用 sqlite 数据库报错 报错 : com.intellij.execution.ExecutionException: Exception in thread "ma ...
- 安装Python3后,centos使用yum报错
题记 在之前的文章中我自定义安装了Python3,并且修改了默认的 Python软链,今天想搭建一个 ftp 服务器,使用命令的时候出现了一个错误: 问题 1.使用 yum 安装 ftp工具 yum ...
- Python3安装Celery模块后执行Celery命令报错
1 Python3安装Celery模块后执行Celery命令报错 pip3 install celery # 安装正常,但是执行celery 命令的时候提示没有_ssl模块什么的 手动在Python解 ...
- Hadoop0.20.203.0在关机重启后,namenode启动报错(/dfs/name is in an inconsistent state)
Hadoop0.20.203.0在关机重启后,namenode启动报错: 2011-10-21 05:22:20,504 INFO org.apache.hadoop.hdfs.server.comm ...
- Springboot项目 配置数据库连接属性后,启动项目报错
Springboot项目 配置数据库连接属性后,启动项目报错,错误如下: 错误原因分析: 1.连接信息配置错误 当使用properties为配置文件时,如图所示,上面的 spring.datasour ...
- Maven 从svn下载后,pom.xml报错解决方案
Multiple annotations found at this line: - Execution default-testResources of goal org.apache.maven. ...
随机推荐
- protect,internal的区别
protected: 爷爷有一张银行卡,爸爸可以用,儿子也可以用,隔壁老王不可以用(因为老王跟爷爷没有继承关系) internal: 王总有一张银行卡,秘书可以用,经理可以用,王总儿子不可以用(因为银 ...
- 【题解】P4886快递员
[题解]P4886 快递员 淀粉质好题!!!加深了我对点分治的理解.最近分治学了好多啊. 题目大意 给定你一颗有边权的树,再给你\(m\)和点对,请你在树上选出来一个点,使得所有点对到这个点的距离的最 ...
- 我的Android进阶之旅------>Handlerr.removeCallbacksAndMessages(null)的作用
今天都到一段代码,在onDestroy()方法中,使用了下面的代码: mHandler.removeCallbacksAndMessages(null); 一开始我完全看不懂,我为什么参数是null, ...
- 【Xcode学C-4】进制知识、位运算符、变量存储细节以及指针的知识点介绍
一.进制知识 (1)默认是十进制.八进制前面加0.即int num1=015;是13.十六进制前面加0x/0X.即int num1=0xd.结果是13.二进制前面是0b/0B,即int num1=0b ...
- discuz论坛搬家
很多站长第一次做网站的时候,无奈选择了速度不是很稳定的空间,慢慢会发现有很多物美价廉速度相当快的空间 这个时候,站长在网站搬家的过程中就会遇到很多困难,今天老袋鼠给大家详细讲解一下discuz论坛搬家 ...
- DOM的介绍
一 . DOM 介绍 什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节 ...
- POJ - 3278 Catch That Cow 【BFS】
题目链接 http://poj.org/problem?id=3278 题意 给出两个数字 N K 每次 都可以用三个操作 + 1 - 1 * 2 求 最少的操作次数 使得 N 变成 K 思路 BFS ...
- 【Leetcode-easy】Remove Element
思路:遍历数组,count保存下一个元素的位置,如果不与该元素相同,那么将该数保存在count位置,并且count++,否则,继续遍历. public int removeElement(int[] ...
- Linux下新建oracle用户
su - oraclesqlplus / as sysdba the procedure of dropping user are as follow: select sid,serial# from ...
- 在PyCharm上创建Django项目
声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用 首先我们在Pycharm上新建一个Dja ...