废话不多说,上代码:

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???的更多相关文章

  1. 博客目录之C#

    C# BackgroundWorker的Bug??? C# BeginInvoke和EndInvoke方法 c# 高效的线程安全队列ConcurrentQueue C# ManualResetEven ...

  2. WPF 分页控件 WPF 多线程 BackgroundWorker

    WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...

  3. 使用BackgroundWorker组件进行异步操作编程

    本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述.在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等 ...

  4. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  5. a标签点击跳转失效--IE6、7的奇葩bug

    一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...

  6. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  7. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  8. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  9. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

随机推荐

  1. springmvc 配置和spring配置?

    最近在接触mybatis,之间使用springmvc时,配置文件一直是,web.xml+XX-servlet.xml 的配置(xx为web.xml中servlet name名称).为了整合mybati ...

  2. [c#基础]泛型集合的自定义类型排序

    引用 最近总有种感觉,自己复习的进度总被项目中的问题给耽搁了,项目中遇到的问题,不总结又不行,只能将复习基础方面的东西放后再放后.一直没研究过太深奥的东西,过去一年一直在基础上打转,写代码,反编译,不 ...

  3. JavaScript中数组的各种操作方法

    [监测数组] 使用instanceof操作符,进行检测 ar arr = [1,2,3]; // arr = '非非'; if(arr instanceof Array){ console.log(' ...

  4. zookeeper疑难杂症

    1.zookeeper是怎么写数据的?因为是master写再同步广播到follow节点,如果master写完,following在写的过程中出现失败怎么办? :zookeeper支持原子的写入操作,要 ...

  5. [翻译] SoundManager 音频管理器

    SoundManager 音频管理器 https://github.com/nicklockwood/SoundManager Purpose SoundManager is a simple cla ...

  6. OpenShift和F5的集成手册

    OpenShift和F5的集成步骤,记录如下,如实际操作中有变更会再度编辑修改. 1.整体架构 使用BIG-IP作为Openshift的Router,能实现以下功能: 为Services创建BIG-I ...

  7. linux查找超过一定时间的文件,并批量删除

    1.find . -maxdepth 4  -name "*-*" -mtime 3 -maxdepth的值决定是否对下面的子目录进行递归查找 -mtime 3表示查找刚好3天的: ...

  8. POJ 1737 Connected Graph 题解(未完成)

    Connected Graph Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3156   Accepted: 1533 D ...

  9. POJ 3069 Saruman's Army

    Saruman's Army Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6688   Accepted: 3424 De ...

  10. 10723 Cyborg Genes (LCS + 记忆化搜索)

    Problem F Cyborg Genes Time Limit 1 Second September 11, 2132. This is the day that marks the beginn ...