Это неприятное, неприятное исключение возникает из-за концепции, известной как COM-маршаллинг. Суть проблемы заключается в том, что для использования COM-объектов из любого потока поток должен иметь доступ к информации о типе, которая описывает COM-объект.
В описанном сценарии причина его сбоя во втором потоке заключается в том, что во втором потоке нет информации о типе интерфейса.
Вы можете попробовать добавить следующее в ваш код:
[ComImport]
[Guid("23EB4AF8-BE9C-4b49-B3A4-24F4FF657B27")]
public interface IMyInterface
{
void CallMethod();
}
По сути, приведенное выше объявление указывает загрузчику COM .NET Framework загружать информацию о типах с использованием традиционных методов из реестра, находить связанную библиотеку типов и переходить оттуда.
Вы также должны ограничить создание COM-объекта одним потоком (чтобы предотвратить сортировку потоков), чтобы помочь решить эту проблему.
Подводя итог, эта ошибка вращается вокруг информации о типе и сортировке потока. Убедитесь, что каждый поток, который хочет получить доступ к COM-объекту, имеет соответствующую информацию, чтобы демонтировать объект из исходного потока.
PS: эта проблема решается в .NET 4.0 с помощью метода, называемого «эквивалентность типов»