STA线程模式线程也会阻止winform UI线程?

Ben*_*nny 2 .net com sta winforms

我正在使用来自后台线程的STA COM对象,其中一个COM对象的方法将阻塞,当我从处于STA线程模式的新线程调用它时,因为COM对象的模式是STA,并且UI线程似乎也被阻止了,我可以避免这种UI阻止吗?

Han*_*ant 5

这就是STA,COM将自动封送从您的工作线程到STA线程的调用.这样COM服务器方法总是以线程安全的方式调用.如果方法阻塞,那也会阻塞你的STA线程.通常是UI线程.

这意味着在线程中使用此COM对象实际上不会完成任何操作.对于另一个真正的问题是在COM服务器中,它不应该阻塞.确保这不是死锁情况.

一种可能的解决方法是在另一个STA线程上创建COM服务器,这样至少不会阻止您的UI线程.检查此答案以获取示例代码.Thread.SetApartmentState和Application.Run调用对于为服务器创建一个好客的家庭至关重要.