EventArrivedEventHandler 和 EventHandler 之间的区别?
Difference between EventArrivedEventHandler and EventHandler?
我尝试创建一个 USB 控制器 class 并试图从 ManagementEventWatcher
公开我的内部 EventArrivedEventHandler
以允许消费者在检测到 USB 时执行某些操作。
我曾期望能够将 EventArrivedEventHandler 转换为 EventHandler,因为它们都只是委托……但显然不是。
为什么这不可能?
编辑:我找到了一种方法,可以让我非常干净地做我想做的事。
_watcher.EventArrived += (sender, eventArgs) => DeviceDetected?.Invoke(null, null);
之所以不可能,是因为 EventArraivedEventHandler
和 EventHandler
有不同的签名。如您所见,EventArrivedEventHandler
将 EventArrivedEventArgs
作为第二个参数,而不是 EventHandler
那样的 EventArgs
。
public delegate void EventArrivedEventHandler(object sender, EventArrivedEventArgs e)
理论上应该可以将其转换为 EventHandler<EventArrivedEventArgs>
。
有关此问题的更多详细信息,请访问 EventArivedEventHandler and EventArrivedEventArgs 的 MSDN 页面。
public event EventHandler DriveDetected;
private void workaround(object sender, EventArrivedEventArgs e)
{
DriveDetected?.Invoke(sender, e as EventArgs);
}
watcher.EventArrived += new EventArrivedEventHandler(workaround);
基于您的post。干杯。
我尝试创建一个 USB 控制器 class 并试图从 ManagementEventWatcher
公开我的内部 EventArrivedEventHandler
以允许消费者在检测到 USB 时执行某些操作。
我曾期望能够将 EventArrivedEventHandler 转换为 EventHandler,因为它们都只是委托……但显然不是。
为什么这不可能?
编辑:我找到了一种方法,可以让我非常干净地做我想做的事。
_watcher.EventArrived += (sender, eventArgs) => DeviceDetected?.Invoke(null, null);
之所以不可能,是因为 EventArraivedEventHandler
和 EventHandler
有不同的签名。如您所见,EventArrivedEventHandler
将 EventArrivedEventArgs
作为第二个参数,而不是 EventHandler
那样的 EventArgs
。
public delegate void EventArrivedEventHandler(object sender, EventArrivedEventArgs e)
理论上应该可以将其转换为 EventHandler<EventArrivedEventArgs>
。
有关此问题的更多详细信息,请访问 EventArivedEventHandler and EventArrivedEventArgs 的 MSDN 页面。
public event EventHandler DriveDetected;
private void workaround(object sender, EventArrivedEventArgs e)
{
DriveDetected?.Invoke(sender, e as EventArgs);
}
watcher.EventArrived += new EventArrivedEventHandler(workaround);
基于您的post。干杯。