2012-09-27 67 views
1

每一秒我想开发它处理的消息从“收件箱”表中的每一秒,随后对其进行处理,而不从每个进程等待结果C#Windows应用程序。我一直在阅读.net中的多线程,但我仍然没有最好的实现方法。什么是执行这些要求的最佳方法?如何实现线程计时器和线程池来处理消息的C#

  1. 我有运行线程计时器然后执行线程池吗?
  2. 或者我只使用线程计时器?

请给你的,因为我应该实现的最佳方法意见和榜样。

谢谢你

+0

它是否必须是“每一秒”具有相当高的准确性?你的系统可以承受多少“滞后”?处理消息需要多长时间?什么是'收件箱表' - 它是数据库表吗? –

回答

2

有两种简单的方法。数是简单,但数是更可能是关于时间,如果你是在UI线程上做大量的工作。你也可以试试Reactive Extensions这个库,它比较酷。

1)System.Timers.Timer默认情况下会在线程池线程上引发ellapsed事件,这可能是合适的,但是如果您使用的是由线程抽取消息循环修改的数据,则需要注意竞争条件。如果您需要将数据推回UI线程,则需要对其进行安排。

2)使用消息循环的计时器,如DispatcherTimer,然后使用BackgroundWorkerTask Parallel Library在另一个线程上执行工作。这些机制可以帮助您将结果汇总回UI线程。

您还需要小心,你处理完从以前的计时器事件之前的工作定时器不过去。