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端口有一个固定的名称,每次启动计算机时都不会更改。我通常在端口打开时检查设备是否连接,并且我可以收到一些东西。 –