vb.net - 从 vb.net 中的另一个类更新 GUI

标签 vb.net multithreading tcp client server

我正在为在 Tcp 和套接字上运行的聊天构建一个服务器和一个客户端,我希望客户端处理多个连接(到服务器)所以我创建了一个名为“客户端”的类来管理异步连接,这样我就可以同时运行更多实例,例如:

Dim ConnectionToServer1 as new Client
Dim ConnectionToServer2 as new Client

因为当“连接”收到一条消息时它是异步的,所以它会生成一个事件 (AsyncCallback),我可以在其中将接收到的字节转换为字符串。

问题是:我试图从 Client 类内部将此字符串设置为我的 Form 上的 RichTextBox,但没有任何反应,我试图在表单代码中创建一个委托(delegate),但没有任何效果,这是唯一的方法我能够将收到的消息放入 RichTextBox 是通过在存储最后一条消息的 Client 类中创建一个名为 LastMessage 的公共(public)变量(每次它收到一条消息时,sub 覆盖字符串),然后运行创建的线程通过不断检查数据的表单(因为线程是由表单创建的,它可以访问控件,包括 RichTextBox,对吗?) 虽然我觉得这有点笨拙,但有没有其他方法(也许通过委托(delegate)?)我可以做到吗?

这是一些代码: 客户端类:http://pastebin.com/GF9um8Ss 表格代码:http://pastebin.com/xW7mDj8j

最佳答案

听起来您走上了所有正确的道路。

现在,在线程应用程序中,您将面临的挑战之一是您可以拥有大量工作线程,但实际上只有主 UI 线程可以对 UI 进行任何更新。因此请记住这一点,如果您有需要更新用户界面的异步代码,您将需要使用有效的委托(delegate)。

如今,您可以更轻松地使用任务来完成此操作,因此请阅读任务并行库,但本质上您需要一个被编码的委托(delegate)/任务在 ui 线程上运行以处理 UI 更新。

关于vb.net - 从 vb.net 中的另一个类更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782084/

相关文章:

c# - 非 Web 项目的 XML 序列化程序集

windows - 使用 VB.NET 检查 Windows 注册表中是否存在某个键

c++ - 处理多个客户端的单个 TCP/IP 服务器(在 C++ 中)?

c# - 使用 .NET 进行 Excel 文件解析/抓取

MySqlConversionException问题

C++11 线程与异步性能(VS2013)

WCF 命名管道服务设置

C++11线程修改std::list

networking - 如果您通过自己的 IP 连接到您的计算机,流量会离开您的 NIC 然后返回吗?

sockets - TCP连接会丢包吗?