2017-09-15 4 views
0

私はUSBコントローラクラスを作成しようとしましたが、USBが検出された場合にコンシューマが何かを行えるように、ManagementEventWatcherから内部のEventArrivedEventHandlerを公開しようとしました。EventArrivedEventHandlerとEventHandlerの違いは?

EventArrayEventHandlerをEventHandlerにキャストすることができると期待していました。これらはすべてデリゲートですが、明らかにそうではありません。

これは不可能な理由はありますか?

編集:私は私が非常にきれいにしたいものをやり遂げる方法を見つけました。

_watcher.EventArrived += (sender, eventArgs) => DeviceDetected?.Invoke(null, null); 

答えて

1

これが不可能である理由は、EventArraivedEventHandlerEventHandlerが異なるシグネチャを持っているということです。ご覧のとおり、EventArrivedEventHandlerEventArrivedEventArgsで、EventArgsではなくEventHandlerとなります。

理論上、これをEventHandler<EventArrivedEventArgs>にキャストすることが可能です。

この問題の詳細については、EventArivedEventHandlerおよびEventArrivedEventArgsのMSDNページを参照してください。

0
public event EventHandler DriveDetected; 

private void workaround(object sender, EventArrivedEventArgs e) 
{ 
    DriveDetected?.Invoke(sender, e as EventArgs); 
} 

watcher.EventArrived += new EventArrivedEventHandler(workaround); 

あなたの投稿に基づいています。乾杯。