想做一個C# 串口通訊的程式,但是不知道該如何監測串口的狀態。
比如說我現在有個串口為COM1
現在增加了兩個串口COM2,COM3,我如何知道增加了這兩個串口?
如果是一直獲取串口,那就太麻煩了。
有沒有什么事件啊?
uj5u.com熱心網友回復:
我的腦海中只有用執行緒
uj5u.com熱心網友回復:
string[] ports = SerialPort.GetPortNames();再加timer檢測
uj5u.com熱心網友回復:
可以監聽 WMI 事件類似于這個的第二點不過里面的Win32_LogicalDisk要改成Win32_SerialPort或者Win32_USBHub,這個要看你串口是怎么連接的,有沒有通過USB轉的這樣,里面的ManagementBaseObject 物件值可以看下這里
uj5u.com熱心網友回復:
timer+GetPortNames 吧 沒什么好辦法.uj5u.com熱心網友回復:
我是點擊下拉框,先清除所有選項,然后再用serial檢測,將檢測結果加到下拉框uj5u.com熱心網友回復:
呵呵,最近剛好玩這個,道理不懂,但我是這么做的://系統訊息常量
public const int WM_DEVICE_CHANGE = 0x219; //設備改變
public const int DBT_DEVICEARRIVAL = 0x8000; //設備插入
public const int DBT_DEVICE_REMOVE_COMPLETE = 0x8004; //設備移除
//============================================================================
//訊息處理(感知設備變化,自動重繪串口串列)
//============================================================================
protected override void WndProc(ref Message m)
{
switch (m.Msg) //判斷訊息型別
{
case WM_DEVICE_CHANGE: //設備改變訊息
{
IniPort(cmbCOM); //列舉串口
}
break;
}
base.WndProc(ref m);
}
uj5u.com熱心網友回復:
void IniPort(ComboBox cb){
string[] com = SerialPort.GetPortNames();
if (com.Length > 0)
{
byte c = 0, ci = 0;
cb.Items.Clear();
foreach (string cn in com)
{
cb.Items.Add(cn);
if (cn == "COM3") ci = c; //除錯時用:專選COM3
c++;
}
cb.SelectedIndex = ci;
}
else
MessageBox.Show("沒有找到任何串口!","串口初始化提示:");
}
uj5u.com熱心網友回復:
插一個新的串口, 這個訊息函式進去好多次 知道什么原因么
不過每次進去就clear一下combobox 有效果 不然就一堆重復的串口
uj5u.com熱心網友回復:
2 樓正解,運行中加新的com口,最好開個執行緒,timer是主程式運行的,別忘了加lock轉載請註明出處,本文鏈接:https://www.uj5u.com/net/48052.html
標籤:C#
