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.Tick
和bw.RunWorkerCompleted
使用相同的处理程序
为什么RunWorkerCompleted不能接受常规的eventandler ?
因为签名与事件不匹配。(委托不是通过co/contro -variance等价的)。根据定义,处理程序always需要与事件的委托具有相同的类型。
更重要的是,是否有一个工作来实现这一点?
就确切的引用而言,您将无法附加确切的处理程序,不。你能做的最好的事情是创建一个合适类型的新事件处理程序,它的主体除了调用你真正想要它执行的代码之外什么都不做:
bw.RunWorkerCompleted += (s,args)=> HandleStuff(s,EventArgs.Empty);