Это мое решение для надстройки VSTO с использованием WindowsForms.
Вам не нужен System.Windows.Forms.Control, чтобы использовать его:
Инициализация в классе ThisAddIn:
Добавить эту строку в функцию ThisAddIn_Startup:
this.TheWindowsFormsSynchronizationContext = WindowsFormsSynchronizationContext.Current
?? new WindowsFormsSynchronizationContext();
Добавить эту новую недвижимость:
public SynchronizationContext TheWindowsFormsSynchronizationContext { get; private set; }
Тогда использование в рабочем потоке:
Globals.ThisAddIn.TheWindowsFormsSynchronizationContext.Send(d =>
{
MyMethodToInvoke();
}, null);
Второе решение (не тестировалось): Вы также можете использовать:
var invokerControl = new Control();
invokerControl.CreateControl(); //Forces the control handle to be created
invokerControl.Invoke(new MethodInvoker(MyMethodToInvoke));
Надеюсь, это поможет, Йорг