C# BackgroundWorker的Bug???
废话不多说,上代码:
public partial class Form1 : Form
{
BackgroundWorker _bgWorker;
int count; public Form1()
{
InitializeComponent(); _bgWorker = new BackgroundWorker();
_bgWorker.WorkerReportsProgress = true;
_bgWorker.WorkerSupportsCancellation = true;
_bgWorker.DoWork += _bgWorker_DoWork; ;
_bgWorker.ProgressChanged += _bgWorker_ProgressChanged; ;
_bgWorker.RunWorkerCompleted += _bgWorker_RunWorkerCompleted;
timer1.Enabled = true;
} private void toolStripButtonStart_Click(object sender, EventArgs e)
{
count = 0;
_bgWorker.RunWorkerAsync();
} private void toolStripButtonStop_Click(object sender, EventArgs e)
{
_bgWorker.CancelAsync(); // 加上这三行代码就会导致不能触发_bgWorker_RunWorkerCompleted,_bgWorker.IsBusy一直未true阻塞在这个地方
while (_bgWorker.IsBusy)
{
Thread.Sleep(100);
}
} private void _bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
System.Windows.Forms.MessageBox.Show("Test Done");
} private void _bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
toolStripLabelIsRunning.Text = count++.ToString();
} private void _bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bgWorker = sender as BackgroundWorker;
bool boolFlag=false;
while (!bgWorker.CancellationPending)
{
Thread.Sleep(100);
boolFlag = !boolFlag;
if (boolFlag)
{
bgWorker.ReportProgress(1);
}
}
Debug.WriteLine("Successfully Exite");
}
}
在一个简单的form中添加一个BackgroundWorker,并注册DoWork,ProgressChanged,RunWorkerCompleted事件
在如图中toolStripButtonStop_Click 界面响应事件函数中如果没有加以下三行代码一切运行正常,Start后正常运行,Stop后正常的推出并触发RunWorkerCompleted事件,
while (_bgWorker.IsBusy)
{
Thread.Sleep(100);
}
但是如果toolStripButtonStop_Click 界面响应事件函数中加入了这三行代码则RunWorkerCompleted事件永远都不会被触发,_bgWorker.IsBusy永远都是true导致toolStripButtonStop_Click 界面响应事件函数无法退出(实际上_bgWorker_DoWork函数早就已经退出了,在输出窗口中可以看到_bgWorker_DoWork函数退出前运行了 Debug.WriteLine("Successfully Exite");
输出的Successfully Exite字符串)
请教各位大神,这是为什么???
C# BackgroundWorker的Bug???的更多相关文章
- 博客目录之C#
C# BackgroundWorker的Bug??? C# BeginInvoke和EndInvoke方法 c# 高效的线程安全队列ConcurrentQueue C# ManualResetEven ...
- WPF 分页控件 WPF 多线程 BackgroundWorker
WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...
- 使用BackgroundWorker组件进行异步操作编程
本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述.在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等 ...
- Tomcat一个BUG造成CLOSE_WAIT
之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...
- a标签点击跳转失效--IE6、7的奇葩bug
一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...
- 关于 Chrome 浏览器中 onresize 事件的 Bug
我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- 了不起的 nodejs-TwitterWeb 案例 bug 解决
了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...
随机推荐
- source insight 设置自动缩进
转:http://biancheng.dnbcw.info/c/283027.html 使用source insight 的时候一直被一个问题困扰着:就是在 { 后如果敲下回车后,光标换行后,但没有 ...
- Curvilinear structure detections
此部分参考处 As a structure-based detector, PCBR does not use edges, instead, it uses curvilinear structur ...
- CentOS6.5配置网络
[ CleverCode发表在csdn博客中的原创作品,请勿转载.原创地址:http://blog.csdn.net/clevercode/article/details/46376985] 1 网卡 ...
- 推荐两份学习 Kotlin 和机器学习的资料
最近 Kotlin 和人工智能比较火,有不少同学留言问我怎么学习 Kotlin,怎么学习机器学习,今天就给大家推荐两份不错的学习资料. 1. Kotlin 学习资料其实,在我看来最好的学习资料就是 K ...
- 数学图形(1.35)Kappa curve
不知道这个曲线和那个运动品牌背靠背有什么关系.阿迪原先的商标是个三叶草,难道背靠背也是由数学图形来的? 以下是维基上的解释. In geometry, the kappa curve or Gutsc ...
- Node.js:Buffer(缓冲区)介绍及常用方法
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...
- mysql 索引长度的限制
myisam表,单列索引,最大长度不能超过 1000 bytes: innodb表,单列索引,最大长度不能超过 767 bytes: utf8 编码时 一个字符占三个字节 varchar 型能建 ...
- Java项目在jsp页面中引入jquery框架的步骤
环境:在Java web项目中引入juqery框架 工具:MyEclipse8.5 [步骤如下] A:新建一个Java web项目TestJquery,在WebRoot目录下创建一个jquery文件 ...
- Cognos权限认证CJP方式之用户密码加密
在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle ...
- Unity5.1 新的网络引擎UNET(十五) Networking 引用--下
孙广东 2015.7.21 本节提供了与网络系统一起使用的组件的具体信息. 10.Network Proximity Checker Suggest a change Success! Than ...