Если нужно в автоматизации запускаемой через COM-интерфейс реализовать асинхронный интерфейс, то создать элемент UI не достаточно. Что бы при запуске через async/await асинхронной задачи происходило переключение в UI поток, должны быть выполнены два условия:
-
ContextSynchronization должен одним из тех, который реализует переключение между потоками, в нашем случае это WindowsFormSynchronizationContex, и об этом беспокоиться не стоит - первый созданный элемент UI, например, Form установит нужный контекст.
-
MessageLoop, вот его нужно запустить самому: Application.Run(new From());
В противном случае будут ошибки доступа к элементам UI из потока отличного от создавшего.