Вы должны быть в состоянии сделать что-то вроде:
if (control.InvokeRequired)
{
control.Invoke(delegateWithMyCode);
}
else
{
delegateWithMyCode();
}
InvokeRequired - это свойство в Controls, позволяющее определить, что вы находитесь в правильном потоке, тогда Invoke вызовет делегата в правильном потоке.
ОБНОВЛЕНИЕ: На самом деле, на моей последней работе мы сделали что-то вроде этого:
private void SomeEventHandler(Object someParam)
{
if (this.InvokeRequired)
{
this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
}
// Regular handling code
}
, который устраняет необходимость в блоке else и как бы ужесточает код.