精品一区二区三区影院在线午夜_天天躁日日躁狠狠躁AV麻豆_国产午夜福利短视频_中文字幕乱偷无码AV先锋蜜桃_久久精品一二区东京热_国产成人亚洲日韩欧美久久久,国产成人精品久久一区二区三区

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

二、效果

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

增城市| 巴彦淖尔市| 大兴区| 尼勒克县| 富蕴县| 丰镇市| 东港市| 云龙县| 千阳县| 阿拉尔市| 察隅县| 紫阳县| 安化县| 静乐县| 景德镇市| 大名县| 衡阳县| 沙雅县| 冀州市| 灌南县| 高唐县| 保亭| 河源市| 邵武市| 阳山县| 广西| 台前县| 石台县| 大理市| 开江县| 富蕴县| 新疆| 长兴县| 华坪县| 镇原县| 澎湖县| 安顺市| 稻城县| 河北区| 铜山县| 安阳县|