我在一个有很多线程的应用程序中。在其中一个线程中,我需要在主线程上运行一些行。在主线程上做一些工作
这是因为Windows XP释放I/O资源,当创作者线头(重叠I/O)。我需要在单例创建中进行实例化。
我该怎么做?
闲谈答案之前:
这不是GUI有关,所以不建议使用类似myControler.BeginInvoke
,因为我没有GUI元素
我在一个有很多线程的应用程序中。在其中一个线程中,我需要在主线程上运行一些行。在主线程上做一些工作
这是因为Windows XP释放I/O资源,当创作者线头(重叠I/O)。我需要在单例创建中进行实例化。
我该怎么做?
闲谈答案之前:
这不是GUI有关,所以不建议使用类似myControler.BeginInvoke
,因为我没有GUI元素
我终于做到了这一点:
BlockingCollection
当我“启动”我单身,我只需添加我的IP地址该集合此线程不会消耗很多资源,因为他将仅等待下一个并在申请期间保持活跃状态。
我添加了一个条件来做到这一点在Windows XP和更低。
你不能只是运行在主线程一些代码,因为它可能正在忙着做别的事情。 您需要一些框架来完成此任务,而Windows UI消息传递就是此类框架的一个例子。
如果您的应用程序是非ui的,那么您可以实现一个静态消息队列,将您的委托放在那里,并不断从主线程检查该队列,并将其委托给它并执行它们。
但是,更好的方法是重新评估应用程序体系结构。也许你可以将IO对象的工作分离到一个线程。
你必须让你的主线程与其他线程交互。这可以通过像AutoResetEvent这样的同步原语来完成。但是,这真的很难得到正确的答案。我认为使用某种工作队列将会是一个更好的设计。 – 2013-03-25 16:39:13
错误..不要结束创建者线程?这会不会更容易? – 2013-03-25 17:47:45
@MartinJames我没有调用我的线程 – J4N 2013-03-26 07:06:37