c#后台工作添加系统.eventandler到RunWorkerCompleted

本文关键字:eventandler RunWorkerCompleted 系统 添加 后台 工作 | 更新日期: 2023-09-27 18:09:30

Timer timer = new Timer();
BackgroundWorker bw = new BackgroundWorker();
EventHandler HandleStuff = delegate { MessageBox.Show("HandleStuff called"); };
timer.Tick += HandleStuff;
bw.RunWorkerCompleted += HandleStuff;

最后一行不允许,因为:

不能隐式转换类型"System"。EventHandler'到'System.ComponentModel.RunWorkerCompletedEventHandler'

2的问题:为什么RunWorkerCompleted不能接受常规的EventHandler -完成的事件不是多线程的,有这个限制存在的原因吗?

更重要的是,是否有一个工作来实现这一点?我想为Timer.Tickbw.RunWorkerCompleted使用相同的处理程序

c#后台工作添加系统.eventandler到RunWorkerCompleted

为什么RunWorkerCompleted不能接受常规的eventandler ?

因为签名与事件不匹配。(委托不是通过co/contro -variance等价的)。根据定义,处理程序always需要与事件的委托具有相同的类型。

更重要的是,是否有一个工作来实现这一点?

就确切的引用而言,您将无法附加确切的处理程序,不。你能做的最好的事情是创建一个合适类型的新事件处理程序,它的主体除了调用你真正想要它执行的代码之外什么都不做:

bw.RunWorkerCompleted += (s,args)=> HandleStuff(s,EventArgs.Empty);