Я создаю экземпляр класса обслуживания, который содержит компонент взаимодействия COM, который выполняет автоматизацию терминала.Я использую Task Library (TPL) от Microsoft.Я хочу сделать вызов COM-объекта из задачи TPL (фоновый поток), чтобы мой пользовательский интерфейс не зависал во время работы COM-объекта.
Однако, когда я вызываю свою первую функцию из фонового потока (который получает IntPtr), генерируется исключение COM, детализирующее HRESULT: 0xC0000005.
Я знаю, что это исключение нарушения доступа, и я думаю,Я неправильно использую свой объект.
Как я могу вызвать методы из COM-объекта, созданного в основном потоке из фонового потока?
public void Button1_Click(object sender, EventArgs e)
{
var comWrapper = new COMWrapper(); // A simple wrapper for a COM object
Task.Factory
.StartNew(() => LoadStuff(comWrapper))
.ContinueWith(() => {
// Output results...
});
}
int LoadStuff(COMWrapper w)
{
return w.LoadStuffFromCOM();
}
Метод, который вызывает COMобъект:
int LoadStuffFromCOM()
{
string buffer;
IntPtr pointer = Marshal.StringToHGlobalUni(buffer);
return comObject.GetValue(pointer); // Exception here...
}