vb.net - 用于 RS232 应用程序中的 Threading.thread.sleep 的 VB.Net 替代方案
问题描述
我正忙于使用 Rs232 Com 端口通信模块的软件。我首先向所有用户发送一个点名(Ping 所有用户),然后等待 10 分钟以接收所有点名,然后我使用列表视图发送给所有未完成的名称(Ping 未完成的活动个人),其余的成员的名字,我以 3 的间隔发送所有优秀的名字,间隔 3.5 秒。我Threading.Thread.Sleep()
用来防止我的中继器泛滥。是否有替代方法Threading.Thread.Sleep()
允许软件仍然接收通过 Rs232 模块发送唱名呼叫的点名反馈?
For i As Integer = 0 To LsvCopyRemove.Items.Count - 1
If LsvCopyRemove.Items(i).SubItems(11).Text = "Yes" Then
Dim Group As String = LsvCopyRemove.Items(i).Text
StringData = vbCrLf & "MY String Information comes here"
_rs232.Write("" & vbCrLf)
Threading.Thread.Sleep(500)
_rs232.Write(StringData & vbCrLf) 'The text contained in the txtText will be sent to the serial port as ascii
Threading.Thread.Sleep(3500)
_rs232.Write(StringData & vbCrLf)
Threading.Thread.Sleep(3500)
_rs232.Write(StringData & vbCrLf)
Threading.Thread.Sleep(3500)
Me.rtbTX.AppendText(.Text & vbCr)
'***********************************************************************************************************************************************************************************************************************************************
.Text = String.Empty & vbCrLf
Data = Encoding.Default.GetBytes(.Text)
_rs232.SendData(Data)
'***************************************************************************************************************************************************************************************************************************************************
Threading.Thread.Sleep(6500)
End If
Next
解决方案
您正在寻找的是异步编程,它允许您同时执行多个线程。在您的示例中,您必须执行上面的代码,该代码在单独的线程中发送未完成的名称。有两种方法可以做到这一点:
使用 System.Threading:将要执行的代码放在子例程中的单独线程中,然后像这样调用它:
Dim newThread As New Threading.Thread(AddressOf myFunction)
newThread.Start()
现在调用 myFunction 的函数中的代码被执行了,但是当前函数的执行还在继续,这样你仍然可以接收事件。
您还可以使用更新的 Threading.Tasks 命名空间,它可以以类似的方式使用:
Dim newTask As Task = Task.Factory.StartNew(AddressOf myFunction)
推荐阅读
- python - 如何在 Pandas 中将 DMS 转换为 DD?
- sql - 在 SQL 中按小时计算出现次数
- javascript - 从脚本标签获取 JSON 值
- react-native - 如何在本机反应中划定地图中的区域
- python - 位置优化
- php - 如何让 PHP 和 PostgreSQL 就如何计算时间间隔达成一致?
- flutter - 推/弹出颤动内存泄漏
- react-native - 如何使用 jest TypeError 正确模拟 react-native-firebase/数据库方法:无法读取未定义的属性“on”
- spring - 使用 Spring 创建另一个数据库的问题
- reactjs - 当我在注册 React Navigation 5 后尝试导航到主页时,如何绕过“功能组件无法给出参考”?