我最后一次创建像你所描述的一个服务器/客户端应用程序,我创建了优先级设置BelowNormal一个新的线程。
与定时器的唯一的事情是,他们(可能)UI线程意味着你的形式将变得反应迟钝或laggy内执行。
然后我基本上是连续循环的线程里面做/ While循环,直到应用程序关闭。快速投入Threading.Thread.Sleep(100)并且性能将会很好。
在循环中,我会检查传入的连接请求,并像你说的,把它们添加到列表等等,那么你也可以处理与每个连接的客户端通信也因为它会影响轻微。
Private Sub StartSocketsServer()
Try
Dim oThread As New Threading.Thread(AddressOf StartSocketsServer_Threaded)
With oThread
.Name = "Socket Server"
.Priority = Threading.ThreadPriority.BelowNormal
.IsBackground = True
.Start()
End With
Catch ex As Exception
'Handle exception
End Try
End Sub
Private Sub StartSocketsServer_Threaded()
Try
Do
'Perform all of your sockets here in a threaded environment.
Threading.Thread.Sleep(1000) '1 sec
Loop Until Me.IsDisposed
Catch ex As Exception
'Handle thread safe exceptions here
End Try
End Sub
没有任何代码很难给出具体的建议(因此评论和不回答),但没有 - 我会说这不好。相反,使用事件断开时引发的事件,并准备好处理断开的客户端的异常。 –
我没有使用代码,因为问题会很长,无法回答,加上我的问题非常具体,谢谢你的回答,我认为,但是使用事件和处理异常并不比这种方式准确,对吗? – suw61678
如果有的话,它们更准确,尤其是处理异常。比方说,你有一个连接的客户端,你的计时器检查并看到他们连接。然后他们断开。您仍然认为它们已连接,并尝试在定时器的下一个循环之前发送消息。例外 - 无论如何需要处理它。 –