在主线程上做一些工作
本文关键字:工作 线程 | 更新日期: 2023-09-27 18:05:38
我在一个有很多线程的应用程序中。在其中一个线程中,我需要在主线程上运行一些行。
这是因为windows XP在创建线程结束时释放I/O资源(重叠I/O)。我需要在Singleton创建中进行实例化。
我怎么能这么做?
离题回答前:
这与GUI无关,所以不要提出类似myControler.BeginInvoke
的东西,因为我没有GUI元素
你不能只在主线程上运行一些代码,因为它可能正忙着做其他事情。您需要一些框架来完成此任务,Windows UI消息传递就是此类框架的一个示例。
如果你的应用程序是非ui的,那么你可以实现一个静态消息队列,把你的委托放在那里,然后从主线程不断地检查这个队列,从它池化委托并执行它们。
然而,更好的方法是重新评估您的应用程序体系结构。也许您可以将IO对象的工作隔离到一个线程。我终于做到了:
- 我添加了一个
BlockingCollection
与我需要创建的所有ip - 当我"启动"我的单例时,我只是在集合中添加我的ip
- 和我开始一个新的线程,背景属性为True,迭代这个集合
这个线程不会消耗太多资源,因为它只会在等待下一次迭代时被阻塞,并且在应用程序的持续时间内保持存活。
我为windows XP及以下版本添加了一个条件。