0
有一個循環遍歷所有端口與特定端口連接。當端口迭代時,關閉窗體需要時間
但同時如果窗體關閉,則需要時間,當我暫停時,看到它卡住時,調試點位於serialport.open()的聲明處。
因此,當應用程序請求打開端口,同時如果窗體關閉,它會掛起一段時間,如果超過6或7個端口需要更多時間。
示例代碼:
string[] portNames = SerialPort.GetPortNames();
int detectPortCount = portNames.Length;
for (int i = 0; i < detectPortCount; i++)
{
SerialPort discoveryPort = new SerialPort();
discoveryPort.WriteTimeout = discoveryPort.ReadTimeout = 2000;
try
{
discoveryPort.PortName = portNames[i];
try
{
if (!discoveryPort.IsOpen) discoveryPort.Open();
}
catch (UnauthorizedAccessException uex)
{
}
}
}
遺憾的是沒有'超時'進行港口開放作業。所以你不能影響這一點。你可以做的是嘗試使用'Task's或'Thread'來並行打開所有的端口。 ps「WriteTimeout」和「ReadTimeout」僅用於讀寫操作,不用於開放部分 –
@Mong Zhu實際上是沒有與PC連接的設備時的問題,這意味着沒有連接建立,沒有寫入和讀操作,僅在打開端口時出現問題。 – Harikrishna
無論設備是否連接,您都應能夠打開端口。通常,這些com端口有一個固定的名稱,每次啓動計算機時都不會更改。我通常在端口打開時檢查設備是否連接,並且我可以收到一些東西。 –