1

「受信トレイ」テーブルからのメッセージを毎秒処理し、各プロセスからの結果を待たずに処理する C# Windows アプリケーションを開発したいと考えています。私は .net のマルチスレッドについて読んできましたが、まだ実装する最適な方法がありません。これらの要件を実行するための最良の方法は何ですか??

  1. スレッドタイマーを実行してからスレッドプールを実行しましたか?
  2. または、スレッドタイマーのみを使用していますか?

私が実装すべき最善の方法について、あなたの意見と例を教えてください。

ありがとうございました

4

1 に答える 1

2

2 つの簡単な方法があります。番号2はより単純ですが、UI スレッドで多くの作業を行っている場合、番号1の方が時間通りに実行される可能性が高くなります。また、はるかに優れたReactive Extensionsライブラリを試すこともできます。

1) System.Timers.Timerは、デフォルトでスレッドプール スレッドで ellapsed イベントを発生させます。これは適切かもしれませんが、メッセージ ループをポンピングするスレッドによって変更されたデータを使用している場合は、競合状態に注意する必要があります。データを UI スレッドに戻す必要がある場合は、データを調整する必要があります。

2) DispatcherTimerのように、メッセージ ループから実行されるタイマーを使用してから、BackgroundWorkerまたはTask Parallel Libraryを使用して別のスレッドで作業を実行します。これらには、結果を UI スレッドにマーシャリングするのに役立つメカニズムがあります。

また、前のタイマーイベントからの作業の処理が完了する前にタイマーが経過しないように注意する必要があります。

于 2012-09-27T04:09:07.807 に答える