在主线程上做一些工作

时间:2013-03-25 16:23:01

标签: c# .net multithreading

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

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

我怎么能这样做?

在非主题回答之前:

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

2 个答案:

答案 0 :(得分:3)

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

如果您的应用程序是非ui,那么您可以实现一个静态消息队列,将您的委托放在那里,并从主线程连续检查该队列,汇集其中的代理并执行它们。

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

答案 1 :(得分:0)

我终于这样做了:

  1. 我添加了一个BlockingCollection,其中包含我需要创建的所有IP
  2. 当我“开始”我的单身人士时,我只是在该集合中添加我的IP
  3. 我开始一个新线程,将Background属性设置为True,迭代此集合
  4. 这个线程不会消耗很多资源,因为他只会在等待下一次迭代时被阻塞,并且在应用程序的持续时间内它会保持活动状态。

    我为Windows XP及更低版本添加了一个条件。