【发布时间】:2012-05-26 02:45:08
【问题描述】:
我有一些 COM 对象正在创建并在 .NET 应用程序的线程上运行。线程被标记为单线程公寓,一切似乎都在工作。我的理解是,如果这些线程尝试从主线程访问 COM 对象,那么这些对象将在 .NET 中自动为我编组和序列化,所以即使在这种情况下,事情也会为我处理,一切都安全而整洁,尽管可能有点慢。
我的问题是,虽然事情似乎运行良好,但我没有在我正在创建的 STA 线程中注入消息循环。如果可以的话,我宁愿避免消息循环,因为它会导致额外的复杂性(以及可能的效率损失)。
我已经阅读了很多关于为什么需要消息循环的建议(主要来自非常有帮助的 Hans Passant),我的理解是消息循环在线程 A 上提供了一个其他线程 B 可以请求的位置生活在线程 A 上的 COM 对象可以被编组和播放。如果这是正确的,那么只要没有其他线程从线程 A 上的 COM 对象请求任何内容,线程 A 在不发送消息循环时是否安全?还是在其他情况下消息循环也可能发挥作用?
我在这里玩火吗?有没有这样的情况,你问你是不是在玩火,而你不是?
【问题讨论】:
-
你有活动吗?您是否可以控制事件处理程序以确保它们的重新进入调用不会导致无限递归?如果您有消息泵,通常使用发布消息来打破这个循环。
-
我想我不知道与此相关的问题。什么会导致在我创建的线程中引发事件而没有其他人正在查看?我正在使用的 COM 对象?据我所知,他们没有引发任何事件......
-
如果您的 COM 对象的设计包括通知外部世界正在发生的事情,您就可以实现像 IConnectionPointContainer 这样的传出事件接口。
标签: .net multithreading com sta