我在一个有很多线程的应用程序中。在其中一个主题中,我需要在主线程上运行一些行。
这是因为Windows XP在创建者线程结束时释放了I / O资源(重叠I / O)。我需要在Singleton创建中进行实例化。
我怎么能这样做?
在非主题回答之前:
这与GUI无关,所以不要提出类似myControler.BeginInvoke
的内容,因为我没有GUI元素
答案 0 :(得分:3)
你不能只在主线程上运行一些代码,因为它可能正忙于做其他事情。 您需要一些框架来完成此任务,Windows UI消息传递就是此类框架的一个示例。
如果您的应用程序是非ui,那么您可以实现一个静态消息队列,将您的委托放在那里,并从主线程连续检查该队列,汇集其中的代理并执行它们。
但是,更好的方法是重新评估您的应用程序架构。也许你可以将IO对象的工作隔离到一个线程。
答案 1 :(得分:0)
我终于这样做了:
BlockingCollection
,其中包含我需要创建的所有IP 这个线程不会消耗很多资源,因为他只会在等待下一次迭代时被阻塞,并且在应用程序的持续时间内它会保持活动状态。
我为Windows XP及更低版本添加了一个条件。