从 vb.net 中的另一个 class 更新 GUI
Update GUI from another class in vb.net
我正在为 运行 在 Tcp 和套接字上的聊天构建一个服务器和一个客户端,我希望客户端处理多个连接(到服务器)所以我做了一个 class 调用 "Client" 来管理异步连接,这样我就可以同时 运行 更多实例,例如:
Dim ConnectionToServer1 as new Client
Dim ConnectionToServer2 as new Client
因为当 "connection" 收到一条消息时它是异步的,所以它会生成一个事件 (AsyncCallback),我可以在其中将接收到的字节转换为字符串。
问题是:我尝试从客户端 class 中将此字符串设置为表单上的 RichTextBox,但没有任何反应,我尝试在表单代码中创建委托,但是没有任何效果,我能够将收到的消息放入 RichTextBox 的唯一方法是在客户端 class 中创建一个名为 LastMessage 的 public 变量,其中存储了最后一条消息(每次收到消息时,sub 覆盖字符串),然后 运行ning 由 Form 创建的线程,它不断检查数据(因为线程是由它可以访问控件的表单创建的,包括 RichTextBox,对吗? )
虽然我觉得这有点笨拙,但有没有其他方法(也许通过委托?)我可以做到吗?
这是一些代码:
客户 class:http://pastebin.com/GF9um8Ss
表单代码:http://pastebin.com/xW7mDj8j
听起来你走上了所有正确的道路。
现在,在线程应用程序中,您将面临的挑战之一是您可以拥有大量工作线程,但实际上只有 UI 主线程可以对 UI .因此请记住这一点,如果您有需要更新 ui 的异步代码,您将需要使用有效的委托。
现在使用任务可以更轻松地完成此操作,因此请阅读任务并行库,但本质上您需要一个 delegate/task 编组到 [=19 上的 运行 =] 线程来处理 UI 更新。
将此全局 属性 设置为 false
Control.CheckForIllegalCrossThreadCalls = false
这将允许您从任何线程编辑表单的任何控件
我正在为 运行 在 Tcp 和套接字上的聊天构建一个服务器和一个客户端,我希望客户端处理多个连接(到服务器)所以我做了一个 class 调用 "Client" 来管理异步连接,这样我就可以同时 运行 更多实例,例如:
Dim ConnectionToServer1 as new Client
Dim ConnectionToServer2 as new Client
因为当 "connection" 收到一条消息时它是异步的,所以它会生成一个事件 (AsyncCallback),我可以在其中将接收到的字节转换为字符串。
问题是:我尝试从客户端 class 中将此字符串设置为表单上的 RichTextBox,但没有任何反应,我尝试在表单代码中创建委托,但是没有任何效果,我能够将收到的消息放入 RichTextBox 的唯一方法是在客户端 class 中创建一个名为 LastMessage 的 public 变量,其中存储了最后一条消息(每次收到消息时,sub 覆盖字符串),然后 运行ning 由 Form 创建的线程,它不断检查数据(因为线程是由它可以访问控件的表单创建的,包括 RichTextBox,对吗? ) 虽然我觉得这有点笨拙,但有没有其他方法(也许通过委托?)我可以做到吗?
这是一些代码: 客户 class:http://pastebin.com/GF9um8Ss 表单代码:http://pastebin.com/xW7mDj8j
听起来你走上了所有正确的道路。
现在,在线程应用程序中,您将面临的挑战之一是您可以拥有大量工作线程,但实际上只有 UI 主线程可以对 UI .因此请记住这一点,如果您有需要更新 ui 的异步代码,您将需要使用有效的委托。
现在使用任务可以更轻松地完成此操作,因此请阅读任务并行库,但本质上您需要一个 delegate/task 编组到 [=19 上的 运行 =] 线程来处理 UI 更新。
将此全局 属性 设置为 false
Control.CheckForIllegalCrossThreadCalls = false
这将允许您从任何线程编辑表单的任何控件