.net - STA线程模式线程也会阻塞winform UI线程?

标签 .net winforms com sta

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

最佳答案

这就是 STA 的要点,COM 会自动将调用从工作线程编码到 STA 线程。以便始终以线程安全的方式调用 COM 服务器方法。如果该方法阻塞,那么也会阻塞您的 STA 线程。通常是 UI 线程。

这意味着在线程中使用此 COM 对象实际上不会完成任何事情。另一方面,真正的问题出在 COM 服务器中,它不应该被阻塞。请确保这不是死锁情况。

一个可能的解决方法是在另一个 STA 线程上创建 COM 服务器,这样至少您的 UI 线程不会被阻塞。检查this answer示例代码。 Thread.SetApartmentState 和 Application.Run 调用对于为服务器创建一个好客的家至关重要。

关于.net - STA线程模式线程也会阻塞winform UI线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417231/

相关文章:

WPF 与 Windows 窗体

c# - 用 C# 编写的托管 OleDB 提供程序

c# - 将数组从 C++ 移动到 C#、修改它并将其传递回 C++ 的最简单方法

.net - 当业务规则是属性可访问性时,如何测试它?

.net - 嵌套 TransactionScope 和/或嵌套连接导致 MSDTC 升级

c# - XmlNode.InnerText

C# 在 COM 重应用中的使用

c# - 根据另一个下拉列表中的选择填充下拉列表

c# - 在 winforms 中创建可点击的 C# 图像映射

c# - 更改 PictureBox 的位置