gpt4 book ai didi

vb.net - 从VB中的串行读取数据时无阻塞等待

转载 作者:行者123 更新时间:2023-12-03 13:17:01 24 4
gpt4 key购买 nike

我有一个过程GUI方法,该方法需要多次从序列中检索数据。

每次这样做时,它都需要等待串行数据功能完成(例如,该功能通过平均从串行接收的所有数据,可以工作15秒钟)。

有什么非阻塞性的等待方式吗?
首先,我尝试了Threading.Thread.Sleep(15000),但是这完全锁定了程序。

我还尝试了非常类似的方法(该方法仍然使用 sleep ,但间隔较小)。阻塞仍然存在,仅间隔0.5秒。

Public Sub ResponsiveSleep(ByRef iMilliSeconds As Integer)
Dim i As Integer, iHalfSeconds As Integer = iMilliSeconds / 500
For i = 1 To iHalfSeconds
Threading.Thread.Sleep(500) : Application.DoEvents()
Next i
End Sub

在调用等待功能之前,应该将串行读取功能设置为单独的线程吗?

最佳答案

一般来说,I/O和任何其他阻塞调用应放在单独的线程上。您可能会得到类似以下内容的结果:

Public Async Sub MyUserInterfaceEventThatMakesTheAsyncCallWork()
Dim result as String = Await ResponsiveSleep()
MyUserInterface.Text = result
End Sub

Public Async Function ResponsiveSleep() As Task(Of String)
Await Task.Delay(10000) 'however long you want the delay to be, or delay logic here
'Calls here should always be Await, or they'll be synchronous
Return "the result of my thing!"
End Function

这很有用,因为您不必考虑太多。只要您在另一个函数中是异步的,就可以或多或少地将其编写为好像是同步的。

关于vb.net - 从VB中的串行读取数据时无阻塞等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45572607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com