2011-08-06 28 views
1

我曾經在Delphi中編寫代碼,我似乎記得有一個異步套接字類,其中在執行了異步操作(例如讀取)之後,消息被髮布到應用程序的消息循環中,並且應用程序簡單地通過抽取消息循環來拾取「完成的閱讀」通知。.NET:它的回調在GUI線程上運行的異步套接字?

這樣做的好處是,回調函數與創建'read'調用的函數在同一個線程上運行,避免了線程惡夢(例如,數據競賽,在觸摸控件之前必須編組到GUI線程,等等。)。

是否有可能在.NET中做到這一點?我搜遍了,無法弄清楚這一點。

回答

2

網絡堆棧和UI堆棧沒有緊密耦合,所以沒有。然而,在你的異步回調,您可以使用

someControl.Invoke(workToDo, args); 

切換回(通過消息循環)到UI線程的WinForms,或Dispatcher.Invoke在WPF。

+0

好的。我想知道這是純粹的Win32可能嗎?我問,因爲我以前認爲我使用的Delphi組件只是Win32的一個包裝,Win32本身是在異步操作完成後將消息發佈到Win32消息隊列的東西。 – Tom