2013-11-21 130 views
5

首先,我想說我知道這個網站上已經有這個版本的版本,其他版本詳細介紹了USB串行適配器的問題以及在某人的應用程序中處理物理斷開連接的問題。我已經回顧了其中幾次討論,並嘗試了各種建議,但沒有取得任何成功。也許我錯過了一些東西,但也許我沒有。在這一點上,我已經失去了多少嘗試,哪些是我嘗試過的,我希望從這篇文章中重新開始,而不是重新審視舊的項目。檢測物理斷開連接的USB串行適配器

總結大部分原創帖子,其中最新的帖子至少在過去的一年中,已經有一個已知的問題,在拔掉USB串口適配器的Windows /開發處理過程中出現了問題。一些帖子/解決方案圍繞一個未處理的/不可捕捉的異常發生,當關閉串口和.NET 4.0中的一個修復程序時,它應該解決這個問題,並且我認爲可以捕獲事件/異常。

我在做什麼,並經歷是這樣的:

我已經寫在C#.NET 4.0服務的應用程序打開一個COM端口和監聽使用內置SerialPort類的數據。然後這些數據可能會被報告給其他本地應用程序或遠程傳送到其他位置。我正在使用Tripp Lite USB轉串口適配器進行測試,但實際的問題報告來自使用筆記本電腦的人,該筆記本電腦具有內部USB轉串口適配器設備,該設備將不時「斷開」和「重新連接」到Windows操作系統。在Windows服務應用程序中打開端口時,我正在通過物理斷開USB設備來模擬出現問題。

我在測試/調試中看到的是,對USB設備的斷開或重新連接沒有反應。我正在接收數據,並且數據流僅停止在服務應用程序中。如果我重新連接設備,COM端口仍然對應用程序開放,但沒有新數據。如果關閉端口,則不會出現「應用程序爆炸」/ UnhandledException錯誤。端口關閉並且應用程序正常停止。在任何時候,我是否會收到一個可捕獲的異常,這是我希望看到的結果。如果我啓動應用程序,數據會再次開始流動。

我希望應用程序知道USB串行/ COM端口何時從系統中移除,最好是在SerialPort級別有某種異常,以便我能夠捕獲異常,關閉端口並進入「重新打開端口模式「,直到設備」重新連接「到PC。這是否可能以這種方式圍繞SerialPort類來實現呢,還是我需要尋求一種圍繞通用「USB設備」斷開連接而不是「串行端口」斷開連接的解決方案? (我有我的應用程序在編程上確定該設備是USB設備,而不是必須將其標記爲準備後者...............)

謝謝, Mark

+0

自從我發現以來的一些事情:在USB串口適配器斷開連接的情況下,我停止了Service應用程序,將SerialPort.IsOpen值設置爲false,以便檢測到斷開連接並標記串口關閉(是.NET 4.0修復??)。但是,我還沒有確定何時IsOpen標誌變化發生。我有一個覆蓋Close()的地方,它不會在斷開連接時被調用。 –

回答

0

什麼是您通過串行通信的設備?它是否支持發送握手/狀態請求?如果是這樣,你是否可以間歇性地輪詢它以檢查設備是否仍然存在,並且如果超時後沒有回來,請自行提出異常?

或者,我之前使用過這個library,它允許您與Windows設備管理器進行交互。本文提供了一些關於如何擴展類以監控設備變化的細節,您可以實現這一點,並且在設備暫時斷開連接的同時有一些事件會引發事件 - 您可以使用它來測試您的設備比連續投票,可能嗎?