在主线程上做一些工作

本文关键字:工作 线程 | 更新日期: 2023-09-27 18:05:38

我在一个有很多线程的应用程序中。在其中一个线程中,我需要在主线程上运行一些行。

这是因为windows XP在创建线程结束时释放I/O资源(重叠I/O)。我需要在Singleton创建中进行实例化。

我怎么能这么做?

离题回答前:

这与GUI无关,所以不要提出类似myControler.BeginInvoke的东西,因为我没有GUI元素

在主线程上做一些工作

你不能只在主线程上运行一些代码,因为它可能正忙着做其他事情。您需要一些框架来完成此任务,Windows UI消息传递就是此类框架的一个示例。

如果你的应用程序是非ui的,那么你可以实现一个静态消息队列,把你的委托放在那里,然后从主线程不断地检查这个队列,从它池化委托并执行它们。

然而,更好的方法是重新评估您的应用程序体系结构。也许您可以将IO对象的工作隔离到一个线程。

我终于做到了:

  1. 我添加了一个BlockingCollection与我需要创建的所有ip
  2. 当我"启动"我的单例时,我只是在集合中添加我的ip
  3. 和我开始一个新的线程,背景属性为True,迭代这个集合

这个线程不会消耗太多资源,因为它只会在等待下一次迭代时被阻塞,并且在应用程序的持续时间内保持存活。

我为windows XP及以下版本添加了一个条件。