【发布时间】:2014-02-22 10:48:24
【问题描述】:
尽管有很多关于 COM 和 STA/MTA 的问题(例如here),但大多数都在谈论具有 UI 的应用程序。但是,我有以下设置:
- 一个控制台应用程序,默认为多线程单元(Main() 显式具有
[MTAThread]属性)。 - 主线程产生一些工作线程。
- 主线程实例化一个单线程 COM 对象。
- 主线程调用 Console.ReadLine() 直到用户点击“q”,然后应用程序终止。
几个问题:
- 很多地方都提到了need of a message pump for COM objects。我是否需要像this 问题所暗示的那样,为主线程手动创建一个消息泵,或者 CLR 会在一个新的 STA 线程上为我创建它?
- 只是为了确保 - 假设 CLR 自动创建必要的管道,那么我是否可以在不需要显式同步的情况下从任何工作线程使用 COM 对象?
- 以下哪项在性能方面更好:
- 让 CLR 负责与 COM 对象之间的封送处理。
- 在单独的 STA 线程上显式实例化对象,并让其他线程通过例如
ConcurrentQueue。
【问题讨论】:
标签: c# com-interop sta mta