Лоцман API и многопоточность под .NET.

Автор mvdtom, 20.05.14, 15:35:49

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

mvdtom

Можно ли как-нибудь обращаться к COM-объектам API Лоцмана из другого потока? И если можно, то как?

Прямое обращение к методам объектов выдает вот такое исключение.

Unable to cast COM object of type 'System.__ComObject' to interface type 'Ascon.AppPlugin.IPluginAppMain'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{E7595DD5-57E1-4F14-BDE0-2F662DDDB17A}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

Пример кода:


private void SomeMethod()
{
var thread = new Thread(DoBacgroundWork);
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
}

private void DoBacgroundWork()
{
IPluginDataSet dataSet = null;
_pluginAppMain.GetPropObjects2(0, "12345", 0, out dataSet);
}


При этом в основном потоке все отлично выполняется. Различные манипуляции с маршаллингом посредством CoGetInterfaceAndReleaseStream и CoMarshalInterThreadInterfaceInStream не привели к успеху.

Всем заранее спасибо