2013-10-24 92 views
2

我有應用程序與設備通信的串行COM端口的連接。設備通過串行COM端口連接。我的應用可以與設備通信。如何自動檢測C#

我需要一些方法/事件,可以通過運行應用程序掃描COM端口。當我將設備連接到PC - 方法/事件將打印MessageBox消息「連接」,或類似的東西。

,我發現這樣的事情:

comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 

但它不工作。

回答

6

我不知道,如果你想自動檢測該端口的設備連接,或自動檢測設備是否連接到特定端口。

在這兩種情況下,雖然,其原理是相同的:

  1. 您列舉使用串行端口:SerialPort.GetPortNames如果您需要確定端口,或跳到第2步,如果你已經知道端口
  2. 爲你打開通過創建一個新SerialPort對象的連接集合中的每個端口,並通過調用Open
  3. 你試圖寫入/從端口讀取數據的確定是否您的序列中的每個打開的連接裝置附連
  4. 用於如果所述數據讀取時間每個打開的連接出來那麼就沒有附接到所述端口裝置;否則,如果你回來,你希望你知道你的設備連接
  5. 爲每個端口什麼,關閉SerialPort對象上使用Close的連接。

在任何給定的位置執行上述操作會告訴您,您的設備是否已連接到該位置以及連接到哪個端口。

如果你需要不斷地做存在檢測,那麼你可能會想創建一個計時器,並定期進行該測試(每30秒或每2分鐘 - 這取決於你的等待時間是否願意接受)。

注意

正如其他的答案中所指出的,你會想異步運行串行端口檢測代碼,以便不阻止你的主應用程序,同時掃描的端口。掃描保證需要一段時間,因爲沒有連接任何設備的端口超時。

+0

+1更徹底的解決方案,然後我的。 – gleng

+0

能否請你幫我這個問題:HTTP://stackoverflow.com/questions/36589000/how-to-know-on-which-serial-port-external-device-is-connected-and-read-data-從 –