我寫了一個簡單的客戶端,它使用dotnet中的TcpClient進行通信。爲了等待來自服務器的數據消息,我使用了一個Read()
線程,它使用阻塞Read()
調用套接字。當我收到我必須產生的各種事件。這些事件發生在工作線程中,因此您無法直接從它更新UI。 Invoke()
可以使用,但對於最終開發者來說很困難,因爲我的SDK可能會被可能根本不使用UI或使用Presentation Framework的用戶使用。表示框架有不同的處理方式。我們的測試應用程序上的Invoke()
因爲Microstation Addin需要花費大量的時間。 Microstation是單線程應用程序,並且其線程上的調用調用並不好,因爲它總是忙於執行繪圖和其他東西消息需要太長的時間來處理。如何在Socket類中使用數據接收事件?
我想我的事件生成在與UI相同的線程中,因此用戶不必通過Dispatcher
或Invoke
。
現在我想知道我怎樣才能通過插座時通知數據到達的?是否有一個回調的構建。我喜歡winsock樣式接收事件,而不使用單獨的讀取線程。我也不想使用窗口計時器來輪詢數據。
我發現IOControlCode.AsyncIO
標誌IOControl()
功能,幫助說
啓用時,數據是 等待接收的通知。此值是 等於Winsock 2
FIOASYNC
恆定。
我找不到任何關於如何使用它來獲取通知的示例。如果我在MFC/Winsock中正確,我們必須創建一個窗口size(0,0)
,它僅用於偵聽數據接收事件或其他套接字事件。但我不知道如何在dotnet應用程序中做到這一點。
在linux中它很容易使用。但是仍然無法找到在dotnet應用程序中使用'FIOASYNC'的例子。 – affan 2011-01-05 10:04:35
看來我必須使用回調函數調用'BeginReceive()',並且在該回調函數中我再次調用'BeginReceive()'。這從msdn。 – affan 2011-01-05 11:11:27