我有一个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/

10-11 05:28