向线程发送消息的最佳方式

时间:2009-12-20 12:39:14

标签: c# .net multithreading message

将消息发送到在c#/。net中的while(1)循环中运行的线程(非进程)的最有效和最快速的方法是什么。

  1. 使用同步队列(例如Blocking Queues & Thread’s Communication in C#

  2. 运行消息循环在线程上下文中使用Application.Run系统winforms并在运行application.run之前订阅捕获线程上下文中的消息的事件。

  3. 使用套接字或命名管道向线程发送消息。

  4. 在Linux中,我习惯使用unix域套接字执行此操作,在Windows中执行此操作的方法是什么?分享内存文件?命名管道? 你觉得怎么样?

1 个答案:

答案 0 :(得分:15)

我个人使用生产者/消费者队列。这实际上就是WinForms消息循环,只是以Windows窗体特定的方式。

请注意,如果您能够使用.NET 4.0,那么框架中内置了collections,这使得这非常简单。特别是,使用BlockingCollection<T>包裹的ConcurrentQueue<T>可以做到你想做的事。

我个人不会使用GeeksCafe代码 - 我将生产者/消费者性质封装到自己的类中,包装队列,而不是处理任何队列以这种方式通过扩展方法。特别是,您需要所有各方正确处理队列,这意味着最好在我的视图中为其提供自己的API。