c#形成沟通

时间:2009-12-28 22:49:15

标签: c# .net winforms ipc messaging

我有一个C#应用程序,它由3种形式组成:

1: Battleship Game GUI
2: Network GUI (does client/server connections)
3: Chat GUI

首先加载表单1。当用户选择setup network时,将显示表单。

当用户选择发送聊天或收到聊天时,会显示聊天。

我希望表单2处理所有消息并将相关消息传递到相关GUI以进一步解码消息。

我还处于发展的早期阶段。目前我trying to use delegates to communicate between the forms

这是最好的方法吗?关于应用程序组件相互发送消息的最佳实践是什么?

2 个答案:

答案 0 :(得分:5)

ikurts,这绝对不是一个好习惯。您的用户界面,无论多少,都应该与通信完全无关。你应该:

  • 阅读.Net中的模型/视图/控制器,看看构建像你这样的项目的好方法
  • 阅读使用线程进行通信,应该很简单

听起来您想要遵循设置应用的最佳做法。你会得到很多关于这个问题的反馈,我认为所有这些都会听起来像这样。帮自己一个忙,并遵循它。并远离形式的通信逻辑!!!

还有一些想法:

我不确定为什么你想把它分成三个屏幕,当两个似乎合乎逻辑:1)网络设置对话框2)游戏对话,可以容纳战舰用户界面和你的聊天用户界面。此配置还可以简化您的结构,因为只需要更新一个屏幕,游戏/聊天屏幕。设置对话框就是这样。

这是一个threaded chat application on CodeProject的示例,它可以很好地作为代码库来启动。我想你的战舰移动只是指定电路板命中的“特殊”聊天消息。

此外,这里有一个network enabled tic tac toe game的例子,它可以提供有关开发客户/服务器游戏的线索。

不要回避看似困难的事情!我的建议是首先编写一个没有UI的聊天/通信客户端,也许只是控制台输出。然后添加一个屏幕,您将看到您不必将窗口与网络结合。

祝你好运!

更多链接:

这是一个很好的discussion about MVC/MVP,它可以启发你的架构。 here's another ......从不同的角度来看。

答案 1 :(得分:2)

您应该将通信分成不同的类(不在表单中)。

但是,为了使表单彼此保持“同步”,您可以使用c#事件(以及代理来处理它们)来通知一个表单在另一个表单上发生了某些事情。您已经使用事件来处理所有表单操作(鼠标按钮单击等),因此您应该对其工作方式有一个基本的了解,网上有很多关于“c#events”和“c#事件处理的文章” “(有一些搜索条件适合您),它会为您提供更多信息,因此我不会在此详细介绍。事件的优点是系统保持松散耦合,任何人都可以订阅它们,因此您将来很容易添加第四个表单并让它“收听”它所需的信息。