【发布时间】:2013-11-10 22:13:51
【问题描述】:
我对多线程甚至 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 = "";
}
【问题讨论】:
-
您使用的是 .Net 4.5 吗?如果是这样,请考虑使用
async/await迁移到基于任务的异步,这样可以避免一些脑痛。 -
恐怕只有 .net 4 :/
标签: c# wpf multithreading sockets