.NET:在GUI线程上运行回调的异步套接字?

时间:2011-08-06 10:00:43

标签: c# .net sockets

我曾经在Delphi中编码,我似乎记得有一个异步套接字类,在执行异步操作(例如,读取)之后,消息被发布到应用程序的消息循环,并且应用程序通过抽取消息循环来获取“完成阅读”通知。

这样做的好处是回调运行在与进行“读取”调用的线程相同的线程上,这避免了线程恶梦(例如,数据竞争,必须在触摸控件之前编组到GUI线程等等) )。

是否可以在.NET中执行此操作?我一直在搜索,无法解决这个问题。

1 个答案:

答案 0 :(得分:2)

网络堆栈和UI堆栈没有紧密耦合,所以没有。但是,在异步回调中,您可以使用

someControl.Invoke(workToDo, args);

切换回来(通过消息循环)到winforms中的UI线程,或WPF中的Dispatcher.Invoke。