Однопоточные COM-компоненты предъявляют жесткие требования к их созданию в потоке STA.Который вы создаете с помощью атрибута [STAThread] в вашем методе Main () и , используя цикл обработки сообщений.Например, созданный Application.Run ().
Теперь вы можете вызывать такой компонент из рабочего потока или обратного вызова таймера.COM обеспечивает выполнение однопоточного требования для компонента и маршалов, вызывающих поток STA.Чтобы победить то, что вы пытались выполнить, все вызовы компонента выполняются только в одном потоке.Вы сделаете это медленнее, а не быстрее.Маршалинг вызова не быстрый.
Здесь нет никакого секретного соуса, вы не можете волшебным образом превратить компонент, который явно заявил, что он не поддерживает многопоточность, в компонент с резьбой.И это не редкость: подавляющее большинство компонентов COM или, в этом отношении, компонентов .NET не поддерживают многопоточность.Разница между компонентами COM и .NET заключается в том, что COM что-то с этим делает.Компонент .NET обычно просто работает со сбоями в какой-либо гонке потоков без диагностики.