c# - STAThread 属性是要求还是建议?

标签 c# .net multithreading

我为 AutoCAD 编写了托管扩展。当 AutoCAD 加载扩展时,它会启动一些 IExtensionApplication.Initialize() 方法。我需要在应用程序的主 Thread 中启动此方法。为此,为此方法设置 STAThread 属性就足够了吗?此属性是要求还是建议

最佳答案

[STAThread] 属性仅适用于独立可执行程序的 Main() 入口点。这是您对操作系统做出的 promise ,告诉它您的程序的主线程“表现良好”。它必须泵出一个消息循环并且永不阻塞。违背 promise 导致难以诊断的不当行为,死锁很常见。

当您编写 AutoCAD 扩展时,这些都不适用。您没有创建线程,是 AutoCAD 创建的。您不能做出任何 promise ,必须由 AutoCAD 来实现它们。它也不是“主线程”,这是一个只能适用于独立程序的术语。

调用您的扩展的线程几乎肯定已经是一个单线程单元,您可以在代码中使用 Thread.GetApartmentState() 来仔细检查。 STA 是显示 UI 的线程所必需的,这是您在扩展程序中经常做的事情。

关于c# - STAThread 属性是要求还是建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260684/

相关文章:

.net - ASP.NET MVC 应用程序的 aspx 文件中的挂起代码如何执行?

c - 简单 pthread 代码中的奇怪结果

c# - 在 C# 中更改 PDF 文本颜色

c# - 如何保存应用程序设置?

c# - 基于其他列表框 C# 数据库的列表框结果

c++ - Node.js 和 C/C++ 集成 : how to properly implement callbacks?

c++ - 来自 c++11 的 std::thread 问题

c# - Ajax 调用 .Net 并发送回 cookie

.net - FluentNHibernate 为 bool 设置默认列值

c# - 在不破坏代码的情况下重命名接口(interface)