我正在編寫一個小測試應用程序來測試通信接口。通信接口是用C++(一個DLL)和使用C#的測試應用程序編寫的。通信接口進而與使用Windows消息傳輸和接收數據的低級硬件堆棧進行通信。爲了實現這一點,通信接口DLL創建一個不可見的子窗口,其父窗口是C#測試應用程序窗口。與硬件通話的順序如下:阻塞函數調用
初始化通信庫。這一步需要傳遞給低級堆棧的主窗口句柄和應用程序實例以進行Windows消息傳遞。
連接時使用的裝置地址
讀/寫
關閉
取消初始化通信庫。
現在,在第二步中,DLL創建一個不可見的窗口與低級硬件堆棧進行通信。由於第二步是阻塞呼叫,因此我希望我的用戶界面在這段時間內有所反應,以防連接需要很長時間。因此,我嘗試使用線程或BeginInvoke調用進行異步連接。但是我觀察到建立連接後,只要子窗口存在,應用程序窗口就會掛起。子窗口似乎阻止所有傳入主窗口的消息。這似乎是因爲子窗口是在另一個線程中創建的。
但我不想要連接在主線程中,因爲它掛起了用戶界面。
我會歡迎任何想法如何避免這個問題?提前致謝。
-Harish
只是好奇爲什麼2是阻止呼叫?您的代碼是否繼續輪詢以查看設備是否已連接?作爲一種解決方案,爲什麼要創建子窗口 - 創建頂級消息窗口(http://msdn.microsoft.com/zh-cn/library/ms632599(VS.85).aspx#message_only)。 – VinayC 2010-10-25 13:31:36
嗨維納,我不創建子窗口。我只使用開發者已經這樣做的DLL。我想內部的DLL有一個超時來知道連接是否完成。這是一個非常大的超時,因此對我的應用程序有阻塞作用。問題的一部分也是因爲通信堆棧提供商 – HIyer 2010-10-25 13:37:48