我正在尝试找出解决此问题的最佳方法。
我有一个 BackgroundWorker,用于在计时器上建立套接字连接。
Public Shared AllUsersWorker As New BackgroundWorker
Public Shared AllUsersWorkerTimer As New DispatcherTimer
AllUsersWorkerTimer.Interval = TimeSpan.FromSeconds(2)
AllUsersWorkerTimer.Start()
AddHandler AllUsersWorkerTimer.Tick, AddressOf All_Users_Worker_Timer_Tick
Public Shared Sub All_Users_Worker_Timer_Tick()
AllUsersWorker.RunWorkerAsync()
End Sub
Public Shared Sub AllUsersWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
tcpClient = New TcpClient
tcpClient.Connect("localhost", 9999)
networkStream = tcpClient.GetStream
If networkStream.CanWrite And networkStream.CanRead Then
Read_All_Connections()
End If
tcpClient.Close()
End Sub
我想启动建立 TCP 连接的 BackgroundWorker 线程,读取/写入一些数据,然后关闭连接并每 2 秒重复一次。
我想每次都物理地打开/关闭连接,因为我连接的服务器不发送数据并且 readByte 调用暂停等待数据并且在我重置程序之前进程无法继续(因此想要对我的 UI 使用不同的线程)。
目前我正在尝试使用间隔为 2 秒的 DispatcherTimer 来调用 Worker.RunWorkerAsync。当调用 RunWorkerAsync 时, DoEvents 方法运行 - 这是第一次工作正常,但在随后的 DispatcherTimer 滴答声中,我发现前一个线程没有关闭,所以在调用 RunWorkerAsync 时我得到了
“此 BackgroundWorker 当前正忙,无法同时运行多个任务”
我可以实现这一目标的最佳方法是什么?
有没有更好的办法?
编辑:考虑一下。如果我能以某种方式在其中构建一个看门狗会很好,所以如果发现 BackgroundWorker 线程运行超过 2 秒,它就会终止,因为这表明该线程已被 tcp 连接阻塞。
本