0

現在、で収集している外部ソースからのデータストリームがありますBackgroundWorker。データの別のチャンクを取得するたびに、ReportProgress()呼び出しを使用してそのデータをGUIに提示します。

ProgressChanged関数は単なる同期メカニズムであるという印象を受けますが、ワーカースレッドがそれを呼び出すと、GUIスレッドが変更を処理している間、両方のスレッドがロックされます。したがって、問題は、バックグラウンドスレッドがGUIを更新している間、データを受信できないことです。つまり、いくつかのパケットが失われます。それは正しいですか、それとも私のパケットが他の場所から来る可能性が高いですか?

それ原因である場合、GUI更新を行うために2番目のスレッドを追加することは合理的な解決策でしょうか、それとも私が掘り下げるべきこれらの問題を解決するためのより良い/より徹底的な方法がありますか?

どんな考えや提案も大歓迎です。

4

2 に答える 2

0

Postメソッドを使用してBackgroundWorkerから非同期でメッセージを送信できるようにするには、GUIスレッドでSynchronizationContextオブジェクトを作成する必要がある場合があります。

于 2009-06-25T10:46:36.137 に答える
0

ワーカースレッドは非同期メッセージをGUIスレッドに送信するだけで、GUIでイベントが発生します。バックグラウンドスレッドを停止するべきではありません(とにかく問題ではありません。ユーザーが別のプログラムを開始することを決定した場合など、GUIプログラムが長時間停止する可能性があります)。

使用しているストリームの種類については話しません。したがって、信頼性の低いUDPデータグラムを受信して​​いない限り、ここでデータが失われることはありません。ストリームは連続的です。

于 2009-06-25T10:48:07.867 に答える