我有一个调用COM组件的c#静态函数。从.Net调用COM调用挂起线程
当从一个普通的WPF应用程序调用此函数时,它会正确返回。 的代码可能是这个样子:
var result = MyClass.StaticCall();
Debug.WriteLine("Hurrah!");
当我打电话的代码,该变量将被设置和调试消息输出符合市场预期。
但是,如果我在一个线程中包装相同的调用,它永远不会返回。失败的代码可能如下所示:
var foo = new Thread(new ThreadStart(() =>
{
var result = MyClass.StaticCall();
Debug.WriteLine("Hurrah!");
}));
foo.Start();
while (foo.IsAlive)
{
}
在这种情况下,StaticCall将不会返回并且线程无限期地被阻塞。
什么可能导致此行为?
附加信息:
- 设置线程的公寓状态没有什么区别。
- visual studio输出窗口中的最后一条消息是COM互操作已加载的通知。
- 所有对COM的调用都被隔离在一个线程中。
* foo.Start()之后的代码是什么?这很重要。主线程不会闲置时,死锁很常见。 –
@Hans我编辑了这个问题来添加这个细节。 –