当前位置: 首页 > 编程语言 > C#

C#-SerialPort.Opentimedout-分享

时间:2023-04-10 14:25:39 C#

C#:SerialPort.Opentimedout?我有一个自动检测线程,它尝试按顺序打开端口并匹配接收到的数据,从而检测关联设备发送数据的端口。现在,对于某些端口,SerialPort.Open只会挂起线程大约30秒。如何在SerialPort.Open函数上设置超时?来自MSDN每个SerialPort对象只能存在一个打开的连接。任何应用程序的最佳做法是在尝试调用Open方法之前先等待一段时间再调用Close方法,因为端口可能不会立即关闭。当您调用Close()时,此工作线程需要时间停止旋转并退出。未指定所需时间,您无法验证它是否已完成。您所能做的就是至少等待一秒钟,然后再次调用Open()。我遇到了同样的问题,希望我的解决方案能帮到你。您可以在一个单独的线程中检测串行端口,该线程将在500毫秒后中止。//串口检测例程privatevoidtestSerialPort(objectobj){if(!(objisstring))return;字符串spName=obj作为字符串;SerialPortsp=newSerialPort(spName);尝试{sp.Open();}catch(Exception){//用户不想体验这种返回;}if(sp.IsOpen){if(你可以收到你需要的数据){isSerialPortValid=true;}}sp.Close();}//串口有效性privateboolisSerialPortValid;//按钮的回调函数检查串口privatevoidbtCheck(objectsender,RoutedEventArgse){foreach(stringsinSerialPort.GetPortNames()){isSpValid=false;Threadt=newThread(newParameterizedThreadStart(testSerialPort));t.开始;线程.睡眠(500);//等待500毫秒t.Abort();//检查端口是否打开成功if(isSpValid){textBlock1.Text="SerialPort"+s+"isOK!";}else{textBlock1.Text="SerialPort"+s+"retards!";}}}}可以在解决办法对案例添加可能的改进您可以使用多线程来加快进程并使用ProgressBar来清楚地显示进度。在您的代码中添加:commPort=newSerialPort();commPort.ReadTimeout=1000000;commPort.WriteTimeout=1000000;我建议你看一下SerialPort.Open方法如果我理解正确,即使发生超时,你也想从串口读取数据。如果是这样,那么您应该捕获TimeoutException并继续循环。比如上面的MSDNCODE就是C#学习教程:C#:SerialPort.Opentimedout?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicstaticvoidRead(){while(_continue){try{stringmessage=_serialPort.ReadLine();控制台.WriteLine(消息);}catch(TimeoutException){}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: