为什么要在SerialPort.Open和Close之前使用Thread.Sleep()?我在SerialPort关闭和打开时阅读的示例代码中注意到,人们会在SerialPort.Open()和Close()之前添加Thread.Sleep(1000)。如下:Thread.Sleep(1000);serialPort1.Open();/*一些代码*/Thread.Sleep(1000);serialPort1.关闭();我在任何地方都找不到任何解释。为什么人们在打开或关闭串行端口之前使用Thread.Sleep来阻止它?是出于某种计时目的吗?我应该在读取或写入串行端口时放置一个Thread.Sleep吗?当您打开一个端口时,SerialPort类会启动一个新线程,该线程负责(通过WaitCommEventWindowsAPI函数)等待串行端口活动(例如数据到达)并将相应的事件发送到您的处理程序。这就是为什么像DataReceived这样的事件实际上发生在工作线程上。当您关闭端口时,Close()调用会立即返回,但工作线程需要一些时间才能减慢速度。如果在调用Close后过早尝试重新打开端口,并且线程尚未停止,则SerialPort实例未处于可以启动新连接的状态。请注意SerialPort.Close的MSDN文档:任何应用程序的最佳做法是在调用Close方法之前等待一定的时间,然后再调用Open方法,因为端口可能不会立即关闭。您可以跟踪端口何时关闭,并确保在再次打开它之前已经过了一些任意超时。读/写前不需要睡觉,但要记住一些怪癖:请记住,.NETBCL中的SerialPort类仍然依赖于底层的Win32API,我认为自最初的版本以来它已经得到了很多微软的喜爱执行。有关详细信息,请参阅每个SerialPort对象只能存在一个打开的连接。任何应用程序的最佳做法是在尝试调用Open方法之前先等待一段时间再调用Close方法,因为端口可能不会立即关闭。查看此链接。我在C#中完成了一些串行I/O程序,但我认为我从未添加过这样的睡眠。我没有遇到任何不良影响(请注意,我的应用程序从不尝试快速连续打开和关闭串行端口)你绝对不应该在阅读或写作之前睡觉。以上是C#学习教程:为什么在SerialPort.Open和Close之前使用Thread.Sleep()?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
