問題描述:串列埠線鬆動或者其他原因導致串列埠通訊中斷時,需要開啟裝置管理器檢視埠號,然後在軟體中重新選擇埠號建立連線,這個過程比較麻煩。
解決辦法:使用win32_pnpentity wmi類來自動獲取裝置管理器中的串列埠埠號,在開啟軟體時,自動獲取需要的埠號,開啟串列埠建立通訊連線。
win32_pnpentity wmi類表示即插即用裝置的屬性,即插即用實體在控制面板的「裝置管理器」中顯示為條目。
侷限性:只適用於pc只有乙個串列埠或者usb轉串列埠的情況。如果同時有多個usb轉串列埠或者usb串列埠,就沒法很好地確定哪個埠號才是需要的埠號了。
例如裝置管理器中有多個usb轉串列埠:prolific usb-to-serial comm port (com11)
prolific usb-to-serial comm port (com12)
prolific usb-to-serial comm port (com13)
本次串列埠通訊中使用usb轉串列埠來通訊,且pc上只有乙個usb轉串列埠,實現**如下:
1///2
///自動獲取串列埠的埠號
3///
4///
com號
5public
string
autogetcom()623
}24}25
searcher.dispose();
26}
2728}29
catch
3033
34string portnames =coms.toarray();
35foreach(string portname in
portnames)
3641}42
return
null
;43 }
managementobjectsearcher類:此類是檢索管理資訊的常用入口點之一。 例如,它可用於列舉系統上的所有磁碟驅動器,網路介面卡,程序和更多管理物件,或查詢已啟動的所有網路連線,暫停的服務等等。
實現過程中遇到的異常:system.management.manangementexception: invalid query
造成異常的原因是:query語句寫錯了
managementobjectsearcher searcher = new managementobjectsearcher("select * from" + win32_pnpentity);
注意:1、有時候一直找不出異常原因,可以檢視一下wmi伺服器是否開啟了。
2、if (hardinfo.properties["name"].value != null) //操作之前先進行判空處理很有必要,不然操作空值會導致異常跑到catch處得不到自己想要的結果。
C 重用UDP埠號
以前碰到乙個問題,希望能夠重用udp的埠號,但一直沒有成功。今天偶然看到一段 竟然可以達到目的,欣喜中記下 ipaddress groupaddress ipaddress.parse 239.0.84.11 socket listener new socket addressfamily.inte...
C 重用UDP埠號
以前碰到乙個問題,希望能夠重用udp的埠號,但一直沒有成功。今天偶然看到一段 竟然可以達到目的,欣喜中記下 ipaddress groupaddress ipaddress.parse 239.0.84.11 socket listener new socket addressfamily.inte...
C 重用UDP埠號
ipaddress groupaddress ipaddress.parse 239.0.84.11 socket listener new socket addressfamily.internetwork,sockettype.dgram,protocoltype.udp listener.se...