首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在RunWorkerCompleted触发后,BackgroundWorker OnProgressChanged仍然触发

在RunWorkerCompleted触发后,BackgroundWorker的OnProgressChanged事件仍然会触发。这是因为RunWorkerCompleted事件是在BackgroundWorker完成其工作后触发的,而OnProgressChanged事件是在BackgroundWorker执行任务期间,报告进度更改时触发的。

如果您希望在RunWorkerCompleted事件触发后停止OnProgressChanged事件的触发,可以在RunWorkerCompleted事件处理程序中取消订阅OnProgressChanged事件。例如:

代码语言:csharp
复制
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    backgroundWorker.ProgressChanged -= backgroundWorker_ProgressChanged;
}

这将确保在RunWorkerCompleted事件触发后,OnProgressChanged事件不再触发。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

backgroundworker组件的使用

(); 为了开始在后台操作,必须调用BackgroundWorker的RunWorkerAsync()方法,当调用此方时,BackgroundWorker 通过触发DoWork 事件,开始执行后台操作...的ReportProgress()方法,通过它传递操作完成的进度值,此外,该方法触发ProgressChanged事件,是此事件中,通过ProgressChangedEventArgs的实例,接收到主线程传递过来的参数...ProgressChangedEventArgs e)  {           progressBar1.Value = e.ProgressPercentage;  }  后台操作完成,...反馈给用户 当后台操作完成以后,无论是completed 还是cancelled,则RunWorkerCompleted 事件被触发,通过此方法可以将后台操作的完成结果反馈给用户; 另外,通过RunWorkerCompletedEventArgs...DoWork 事件时,DoWorkEventArgs 实例的Result 属性,返回值到用户;RunWorkerCompleted 事件里,RunWorkerCompletedEventArgs 实例的

98720

C#基础知识回顾--BackgroundWorker介绍

简介 BackgroundWorker是.net里用来执行多线程任务的控件,它允许编程者一个单独的线程上执行一些操作。...该控件有三个事件: DoWork 、ProgressChanged 和 RunWorkerCompleted 程序中调用RunWorkerAsync方法则会启动DoWork事件的事件处理,当在事件处理过程中...,调用 ReportProgress方法则会启动ProgressChanged事件的事件处理,而当DoWork事件处理完成时,则会触发RunWorkerCompleted事件。...您必须非常小心,确保 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged和 RunWorkerCompleted 事件与用户界面进行通信。...Result: 等下面讲到RunWorkerCompleted事件时再细说。 RunWorkerCompleted事件 当DoWork事件处理完成之后,将会触发该事件。

1.1K50
  • 浅谈.Net异步编程的前世今生----EAP篇

    创建WinForm,放入Label控件用于展示下载进度和其他信息,并加入两个Button按钮,分别为开始下载和取消下载,再放入我们的主角:BackgroundWorker组件,如图所示: 加入这些基本组件...EAP模型中,执行RunWorkerAsync方法,会触发backgroundWorker1_DoWork事件。...由于这个过程是异步的,因此我们backgroundWorker1_DoWork事件中不断判断CancellationPending属性,若取消则设置e.Cancel=true进行标志位标志,标志我们可以...backgroundWorker1_RunWorkerCompleted判断是否已经取消,最后对UI进行提示输出,取消操作完成。...尤其是BackgroundWorker组件,定义相应的事件不同阶段根据需求编写方法即可实现异步操作、报告进度及取消等。

    50120

    如果在BackgroundWorker运行过程中关闭窗体…

    Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作。...如果我们注册了BackgroundWorkerRunWorkerCompleted事件,并且该事件处理程序中需要操作这个被Disposed的窗体,就会出现一些无法预知的异常。...方法backgroundWorker_RunWorkerCompletedBackgroundWorkerRunWorkerCompleted事件处理方法,在这里我们通过MessageBox来显示当前窗体的...当该窗体被显示出来,点击按钮让注册到该BackgroundWorker的异步操作开始执行,然后操作结束之前(10秒)将当前窗体关闭。...10秒钟之后,如右图所示的一个MessageBox会显示出来,表明执行BackgroundWorkerRunWorkerCompleted事件处理程序的时候,承载它的窗体已经被Dispose。

    1.2K110

    【C#】带等待窗体的BackgroundWorker

    功能: bgwUI执行任务期间(DoWork事件)显示一个等待窗体,任务执行完成自动消失。...任务执行完是指DoWork事件跑完,而不是RunWorkerCompleted事件完,也就是RunWorkerCompleted执行期间已经没有等待窗体了 等待窗体可以自定义,但须实现IWaitForm...但是虽然更新等待窗体不需要ProgressChanged事件,但如果你仍然需要该事件做一些其它事,仍然可以注册并照常使用 方案源码: BackgroundWorkerUI.cs仅包含class BackgroundWorkerUI...原活动窗体会在该方法完成才会重新获得焦点,所以必须加以干预让原窗体现在就获得焦点 //否则随后的RunWorkerCompleted事件中弹出的模式窗体会有不正常的表现...这个源码里也有说明,就是要让等待窗体Hide,base.OnRunWorkerCompleted执行前,让原先那个活动窗体立即获得焦点,activeForm就是用来记录原先那个活动窗体用的。

    1.8K30

    温故而知新:WinFormSilverlight多线程编程中如何更新UI控件的值

    --最偷懒的办法(Winform/Silverlight通用) BackgroundWorker会在主线程之外,另开一个后台线程,我们可以把一些处理放在后台线程中处理,完成之后,后台线程会把结果传递给主线程... bw = new BackgroundWorker())             {                 bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler...(bw_RunWorkerCompleted);                 bw.DoWork += new DoWorkEventHandler(bw_DoWork);                 ...Thread.CurrentThread.ManagedThreadId.ToString());             e.Result = e.Argument;//这里只是简单的把参数当做结果返回,当然您也可以在这里做复杂的处理,...再返回自己想要的结果(这里的操作是另一个线程上完成的)         } void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs

    1.8K50

    从零开始搭建一个GIS开发小框架(九)——WPF进度条效果

    1 概述 Introduction to new functions 今天借GIS项目实现一个进度条效果,这个效果在各种管理系统中是最常见的一个效果,特别是处理某个任务消耗的时间过长的场景,可以避免...我原来winform里面实现过,但是WPF框架里还没做过,拿这个练练手,为今后的工(qiu)作(zhi)任(mian)务(shi)做好技术储备。 委托是一种引用类型,它是函数指针的托管版本。...弹框代码示例 // 文本框赋值方法 的委托属性 private LoadDataEventHandler _loadDataSubWindowDel; BackgroundWorker worker =...worker.ProgressChanged += ProgessChangedInit; //注册任务 worker.DoWork += DoWorkInit; //任务完毕触发...worker.RunWorkerCompleted += CompleteWorkInit; StartKeyCompareRunning(typeString, adname);

    55330

    绝对干货:自定义msi安装包的执行过程

    平时使用msiexec.exe习惯了,所以最直接的想法就是一个子进程中执行:     msiexec.exe /qn 这样固然是能够完成任务,但是不是太简陋了?...安装开始我们想取消这次安装怎么办? 或者我们还想要拿到一些安装进度的信息。 其实可以通过调用三个windowsAPI 轻松搞定这个事儿!...使用这个方法需要注意的是,当你完成安装一定要把原来的handler设回去。否则以后执行msi安装包可能会出问题。...安装进行的过程中可以把cancel信息传递给MsiProgressHandler,当MsiProgressHandler检测到cancel信息通过返回值告诉msi的执行引擎,执行cancel操作(msi...如果要安装多个msi只需Install方法中循环就可以了。  总结一下,通过调用几个windows API,我们可以实现对msi安装过程的控制。

    2K90

    Windows Phone 7实战 第一天 设计启动页面和应用程序图标

    每一个 Windows Phone 7 应用程序启动时多少会花上一些时间,在这个等待的时刻经常都会摆放一些启动画面 (Splash screen) 先来充充场面,以免加载时间过长而导致使用者不耐烦,而在这个启动屏幕里是一个很好的宣传页面...不过修改了文件的项目属性,你的 Image 控件的 Source 属性也要跟着调整,且必须调整为相对于项目根目录的绝对路径,用文字描述比较难懂,看图吧: ?...          {               Thread.Sleep(3000);           });           backroungWorker.RunWorkerCompleted...今天我学到了如何有时 GUI 接口不见得最方便,有时后手动修改 XAML 或调整属性值比用图形接口来拖曳来的方便。...学到了如何正确的使用 Popup 来显示启动画面,并通过 BackgroundWorker 的后台作业来设定固定时间自动关闭启动画面。最后后面还学习了如何设定应用程序图标和背景图等。

    94990

    让WPF的初始化启动窗体动起来

    作者的话: ❝使用一些应用的时候会发现等待界面做的用户体验很好,所以打算使用wpf实现一篇。 博文效果图: ? 动态窗体 2.1 开始实现上面的效果还差啥?...启动窗体后台代码也与博文有差异,待启动窗体Loaded完成,使用了BackgroundWorker,将费时操作放在了DoWork中处理,待DoWork费时操作完成,再启动了主窗体、关闭启动窗体。...var bw = new BackgroundWorker(); bw.DoWork += (s, y) => { Common.TemporaryFile(); Common.ApplicationListCache...Common.ApplicationListCache); FileHelper.WriteFile(json, Common.temporaryApplicationJson); Thread.Sleep(2000); }; bw.RunWorkerCompleted...大家参考时,初始化的一些细节可以尝试打印启动窗体上,能让用户觉得这程序在运行呀,原来执行这个操作,才不会让人觉得突兀,更能理解为啥启动一个界面还等这么久,我理解了,我才好表扬你噻,是不?

    2.3K10
    领券