Windows窗体和套接字类共同使用

本文关键字:窗体 套接字 Windows | 更新日期: 2023-09-27 18:27:04

我遇到了一个问题,这个问题一定很常见,但对谷歌的世界几乎没有什么了解。

你看,我的项目有三个部分,我使用:

  • CommunicationClass.cs(异步套接字类)
  • Form1.Designer.cs(包含Form1的对象)
  • Form1.cs(主构造函数,包含对象的事件处理程序)

非常基本的设置。

然而,我不知道我把通信类实例放在哪里了。通信类发送/接收消息。因此,我在Form1中的ComClass实例将在事件处理程序中使用它的void Send()来处理按下的回车键(在textBox中)。

这很好。不能正常工作的是当ComClass接收到消息时。它不能使用Form1.cs中PrintMessage()的非静态void,并且PrintMessage不能是静态void,因为显示消息的richTextBox1是非静态的。

我想知道C#的另一个组件是否能帮助我访问这些并解决我的问题,但我对C#太陌生了,不知道。我想继续使用我的布局,而不是切换到一个像TCP聊天客户端这样的示例,在那里表单是在Program.cs.之外创建的

Windows窗体和套接字类共同使用

在C#中,像这样的东西的标准范例是使用事件。这与软件设计中观察者模式的思想是一致的。

你已经在用它来处理按键了。"诀窍"是在CommClass上实现一个事件,Form实例可以订阅该事件,以便接收传入数据的通知。

通常的.NET Forms实现通常是一种"穷人的MVC",其中Form类最终同时充当控制器和视图。当然,这样做否定了MVC设计的主要好处,即视图完全独立于控制器。

但是,您可以(在学习了更多关于MVC设计模式的知识后)创建第三个"控制器"类,将视图(Form)和模型(实现实际工作的CommClass)联系在一起。

如果你想变得非常俗气,你可以直接将Form实例传递给CommClass,并让CommClass知道在接收数据时调用一些特殊的方法。但这只是加倍强调了未能将课堂上的问题分开,将它们更加紧密地联系在一起。也许可以快速、肮脏地验证概念,但这不是编写您有兴趣在未来重用的代码的方法。