J'ai une classe DirectoryMonitor qui fonctionne sur un autre thread. Il a les événements suivants a déclaré:Appel de EventHandler generic, TargetParameterCountException
public class DirectoryMonitor
{
public event EventHandler<MonitorEventArgs> CreatedNewBook;
public event EventHandler ScanStarted;
....
}
public class MonitorEventArgs : EventArgs
{
public Book Book { get; set; }
}
Il y a un formulaire en utilisant ce moniteur, et lors de la réception des événements, il faut mettre à jour l'affichage.
Maintenant, cela fonctionne:
void DirectoryMonitor_ScanStarted(object sender, EventArgs e)
{
if (InvokeRequired)
{
Invoke(new EventHandler(this.DirectoryMonitor_ScanStarted));
}
else {...}
}
Mais cela jette TargetParameterCountException
:
void DirectoryMonitor_CreatedNewBook(object sender, MonitorEventArgs e)
{
if (InvokeRequired)
{
Invoke(new EventHandler<MonitorEventArgs>(this.DirectoryMonitor_CreatedNewBook));
}
else {...}
}
Qu'est-ce que je manque?
Merci pour la solution. Bien que je ne comprends toujours pas pourquoi le premier événement est déclenché, mais le second jette l'exception. – Amirshk
J'ai eu le même comportement étrange. Un Invoke a travaillé et l'autre pas. La "clé" était que l'Invoke actif utilisait une simple classe dérivée de EventArgs sans aucun ajout et que l'invocation non-active utilisait une classe dérivée de EventArgs avec des champs supplémentaires (comme votre MonitorEventArgs). Il semble que le premier cas soit ignoré pendant la réflexion, mais pas le second. – Mike