我有一个WinForm应用程序,该应用程序使用BackGroundWorker创建TCP客户端并将一些数据发送到远程服务器。
当套接字完成后,关闭连接,BGW从DoWork Sub退出。
在RunWorkerCompleted Sub中,我必须等待来自远程服务器的数据包,因此我一直在运行TCP服务器,该服务器填充Friend String类型的变量,并指示使用 bool 类型的变量(标志)接收到整个数据包。
因此,我必须等待该标志变为True,以处理必须在String类型变量中的数据;但是我不想挂断GUI,所以我看到存在一个名为SpinWait的方法。
那么,此代码可以正常工作吗?
如果五分钟后标志不为真,是否有办法摆脱循环?
Private Sub BGW1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGW1.RunWorkerCompleted
While Not AckReady
System.Threading.Thread.SpinWait(500)
End While
'Here process the received data from TCP server
TmrReport.Start()
End Sub
另一件事是,多少次迭代代表500mS?
最佳答案
根据文档:
Thread.SpinWait Method
因此,Sleep
基本上释放了处理器,因此它可以被其他人使用,而SpinWait
运行一个循环,使处理器保持繁忙(并锁定到其他线程)。
关于multithreading - Thread.Sleep()和Thread.SpinWait()有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29851910/