【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()
方法為刷新串口的相關操作,不管在設備插入還是拔出的時候都應該調用,在插入時添加到串口選項,在拔除時移除串口選項,如果串口是打開狀態則監測連接的串口有沒有被拔掉,有拔掉就斷開當前串口(雖然會自己斷掉,但是沒有回調,因此需要主動檢測并斷掉)。
二、效果
能實現插入串口實時刷新,拔除之后自動斷開,效果理想。