【C#】Winform監聽USB串口設備拔插實現自動斷開


【C#】Winform監聽USB串口設備拔插

零、問題

最近在開發串口相關的軟件,需要檢測串口拔掉后主動關閉串口,因此需要檢測到USB的拔插事件。

一、解決

在主窗口From類下覆蓋WndProc方法:

//事件代碼
private const int WM_DEVICECHANGE = 0x219; //設備改變
private const int DBT_DEVICEARRIVAL = 0x8000; //檢測到新設備
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //移除設備

protected override void WndProc(ref Message m)
{
        base.WndProc(ref m);//調用父類方法,以確保其他功能正常
        switch (m.Msg)
        {
                case WM_DEVICECHANGE://設備改變事件
                        switch ((int) m.WParam)
                        {
                                case DBT_DEVICEARRIVAL:
                                        DebugWriteLine("新設備", DEBUG_I);
                                        int devType = Marshal.ReadInt32(m.LParam, 4);
                                        DebugWriteLine("設備類型:" + devType, DEBUG_I);
                                        break;

                                case DBT_DEVICEREMOVECOMPLETE:
                                        DebugWriteLine("設備移除", DEBUG_I);
                                        break;
                        }
                        //刷新串口設備
                        RefreshUsableSp();
                        break;
        }
}

其中,RefreshUsableSp()方法為刷新串口的相關操作,不管在設備插入還是拔出的時候都應該調用,在插入時添加到串口選項,在拔除時移除串口選項,如果串口是打開狀態則監測連接的串口有沒有被拔掉,有拔掉就斷開當前串口(雖然會自己斷掉,但是沒有回調,因此需要主動檢測並斷掉)。

二、效果

能實現插入串口實時刷新,拔除之后自動斷開,效果理想。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM