0

Windows フォーム内に UDP リスナーを作成しようとしています。アドレスとエンドポイントをリッスンし、受信したテキストをフォームのテキスト ボックスに表示したいと考えています。私はこれをさまざまな角度から攻撃しようとしました。

私の試みの 1 つは、BackgroundWorker を使用して、UI スレッドで制御しながらリスナー コードを実行し続けることです。リスナーがリッスンし続けるので、複数行のテキスト ボックスに送信される ASCII データを追加し続けたいと思います (Visual Studio 2010 と C# を使用)。フォームに BackgroundWorker を追加したので、リスナーを開始および停止できます。送信側クライアントからテストを受信して​​ MessageBox に表示できますが、同じテキストでフォームのテキスト ボックスを更新するのに問題があります (これが実際にやりたいことです)。

私が試したもう 1 つの角度は、AsyncCallback で BeginReceive メソッドを呼び出す UdpClient を使用するスタック オーバーフローでの投稿のコードを試すことです。この例では、コールバックは渡された UdpClient を使用して EndReceive メソッドを呼び出し、データを取得してから、Console.WriteLine を使用して出力します。受け取ったテキストをフォームのテキストボックスに追加しようとして、そのコードを試しましたが、役に立ちませんでした。BackgroundWorkder またはおそらく UdpClient を使用してフォームのテキスト ボックスに受信したテキストを表示する方法はありますか、またはこれまたは他の方法で別のスレッドを使用して調査する必要があります。マルチスレッド プログラムを実行したことがないので、この点に関しては初心者です。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

1

あなたはおそらく BackgroundWorker の実装に近かったでしょう。バックグラウンド スレッドが UI を更新しようとしないことを確認する必要があります。テキスト ボックスを、BackgroundWorker にアタッチする ProgressChangedEventHandler に更新するには、コードを移動する必要があります。メッセージを受信したら、(ロックで保護された) バッファーを更新し、ReportProgress メソッドを呼び出します。ReportProgress メソッドは、UI スレッドで ProgressChangedEventHandler を呼び出します。これにより、バッファーの内容に基づいてテキスト ボックスを更新できます。

于 2013-05-15T15:55:49.780 に答える