0

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

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

我怎么能这样做?

在题外话之前:

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

4

2 回答 2

3

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

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

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

于 2013-03-25T16:33:42.210 回答
0

我终于做到了:

  1. 我添加了一个BlockingCollection我需要创建的所有 IP
  2. 当我“开始”我的单例时,我只需在该集合中添加我的 IP
  3. 然后我开始一个新线程,将 Background 属性设置为 True,在这个集合上进行迭代

该线程不会消耗太多资源,因为他只会在等待下一次迭代时被阻塞,并且在应用程序期间保持活动状态。

我为 Windows XP 及更低版本添加了执行此操作的条件。

于 2013-03-26T07:05:51.267 回答