2013-03-25 80 views
0

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

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

我该怎么做?

闲谈答案之前:

这不是GUI有关,所以不建议使用类似myControler.BeginInvoke,因为我没有GUI元素

+0

你必须让你的主线程与其他线程交互。这可以通过像AutoResetEvent这样的同步原语来完成。但是,这真的很难得到正确的答案。我认为使用某种工作队列将会是一个更好的设计。 – 2013-03-25 16:39:13

+0

错误..不要结束创建者线程?这会不会更容易? – 2013-03-25 17:47:45

+0

@MartinJames我没有调用我的线程 – J4N 2013-03-26 07:06:37

回答

0

我终于做到了这一点:

  1. 我加入,我需要创建
  2. 所有IP地址一个BlockingCollection当我“启动”我单身,我只需添加我的IP地址该集合
  3. 我在开始一个新的线程,将Background属性设置为True,在该集合上进行迭代

此线程不会消耗很多资源,因为他将仅等待下一个并在申请期间保持活跃状态​​。

我添加了一个条件来做到这一点在Windows XP和更低。

3

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

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

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

+0

Dispatch.Run():分派器在一个循环中处理事件队列。该循环被称为框架。初始循环通常由应用程序通过调用Run启动。 主执行框架将继续执行,直到分派器关闭,您可以调用ExitAllFrames()来停止消息泵。 – David 2013-03-25 16:38:47

+0

我有5到6个不同的类库,在开始课和单身课之间有20+类。我只是不能做些什么,并祈祷使用使用库的库的人使用我的库进行实例化。 – J4N 2013-03-25 16:39:21

+0

@David:我无法访问任何GUI元素,我应该如何访问任何调度程序? – J4N 2013-03-25 16:40:25

相关问题