我有一个运行 TCP/IP 服务器和客户端的 C# WinForm。单击按钮时,会实例化 TCP 客户端以传输消息,然后将其关闭。服务器捕获消息,并将其显示在消息框上。
问题:
我的 WinForm 好像被打断了。它并不总是响应我的点击(实例化客户端消息传输方法)。我想这是由于服务器线程?如果是这样,我能做些什么来解决这个中断。
我有一个运行 TCP/IP 服务器和客户端的 C# WinForm。单击按钮时,会实例化 TCP 客户端以传输消息,然后将其关闭。服务器捕获消息,并将其显示在消息框上。
问题:
我的 WinForm 好像被打断了。它并不总是响应我的点击(实例化客户端消息传输方法)。我想这是由于服务器线程?如果是这样,我能做些什么来解决这个中断。
听起来您的网络正在 UI 线程中发生。这是一个大问题:UI 线程旨在随时响应用户事件。
你应该把你的网络放到一个单独的线程上,或者使用一个异步 API。不要忘记您只能从 UI 线程更新您的 UI - 因此您通常要么使用BackgroundWorker
报告 UI 线程上的进度/完成,要么使用Control.Invoke
/Control.BeginInvoke
来执行 UI 线程上的委托。您可以阅读各种书籍和教程中的线程 - 我喜欢Joe Albahari 的教程。
如果您使用的是 .NET 4.5 / C# 5,您可以使用异步调用来让您的生活更轻松 - 但如果您使用的是早期版本的 .NET,使用单独的线程可能会更简单。