2017-09-15 4 views
0

J'ai essayé de créer une classe de contrôleur USB et j'ai juste essayé d'exposer mon EventArrivedEventHandler interne de ManagementEventWatcher pour permettre au consommateur de faire quelque chose si une clé USB est détectée.Différence entre EventArrivedEventHandler et EventHandler?

Je m'attendais à pouvoir convertir EventArrivedEventHandler en EventHandler, car ils ne sont que des délégués ... mais apparemment pas.

Y at-il une raison pour laquelle cela n'est pas possible?

EDIT: J'ai trouvé une approche qui me permet de faire ce que je voulais très proprement.

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

Répondre

1

La raison pour laquelle cela est impossible est que EventArraivedEventHandler et EventHandler ont des signatures différentes. Comme vous pouvez le voir, le EventArrivedEventHandler prend comme second argument EventArrivedEventArgs et non EventArgs comme EventHandler.

public delegate void EventArrivedEventHandler(object sender, EventArrivedEventArgs e) 

En théorie, il devrait être possible de lancer ce à un EventHandler<EventArrivedEventArgs>. Consultez la page MSDN pour EventArivedEventHandler et EventArrivedEventArgs pour plus de détails sur ce problème.

0
public event EventHandler DriveDetected; 

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

watcher.EventArrived += new EventArrivedEventHandler(workaround); 

Basé sur votre publication. À votre santé.