2

私はマルチスレッドや Socket プログラミングにかなり慣れていませんが、ご容赦ください。現在、Socket.BeginReceive を使用して別のコンピューターからメッセージを受信して​​いますが、問題なく受信されています。

ただし、受信した情報を使用してやりたい重要なことは、UI を更新することです。(または、UI にバインドされたデータ)しかし、それを行おうとするとプログラムがクラッシュします。これは、AsyncCallback デリゲートが別のスレッドで実行されるためだと思います。別のスレッドからメイン ウィンドウ変数 (私は WPF を使用しています) にアクセスするための標準的な手順は何ですか? BeginInvoke() の使用について漠然としたことを読んだことがありますが、メイン ウィンドウにまったくアクセスできないため、ここで呼び出しを使用する方法がわかりません。

助けてくれてありがとう!

関連するコードは次のようになります。

Listener.BeginReceive(Recieved, 0, Recieved.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);

private void OnReceive(IAsyncResult ar)
{
   TextBox_1.Text = "";
}
4

1 に答える 1

1

経由でアクセスできるディスパッチャーを介して、UIスレッドで物事を委任できますApp.Current.Dispatcher-

App.Current.Dispatcher.Invoke((Action)delegate { TextBox_1.Text = ""; });

または、非同期で呼び出す場合は、BeginInvoke を使用します -

App.Current.Dispatcher.BeginInvoke((Action)delegate { TextBox_1.Text = ""; });
于 2013-11-10T14:13:51.883 に答える