2012-09-27 65 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線程。

您還需要小心,你處理完從以前的計時器事件之前的工作定時器不過去。