Vous devriez pouvoir faire quelque chose comme :
if (control.InvokeRequired)
{
control.Invoke(delegateWithMyCode);
}
else
{
delegateWithMyCode();
}
InvokeRequired est une propriété sur Controls pour voir si vous êtes sur le bon thread, puis Invoke invoquera le délégué sur le bon thread.
MISE À JOUR : En fait, lors de mon dernier travail, nous avons fait quelque chose comme ceci :
private void SomeEventHandler(Object someParam)
{
if (this.InvokeRequired)
{
this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
}
// Regular handling code
}
ce qui supprime le besoin du bloc else et resserre en quelque sorte le code.