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 回答