2009-12-28 21 views
1

我有一个C#应用程序,它由3种形式:C#形式的通信

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

形式1首先被加载。当用户选择setup network时,将显示表格2。

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

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

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

这是做这件事的最好方法吗?有关应用程序组件向对方发送消息的最佳做法是什么?

+0

谷歌'事件聚合器c#' - 这是组件间通信的最佳实践,代表不是。 – 2009-12-28 22:55:45

+0

我不能通过搜索“事件聚合器C#”得到很多。也可能是WPF的一部分。但目前即时通讯使用C#和Windows窗体。这是我未来研究WPF和WCP的目标,但不仅仅是现在。即时尝试通过采取小步骤取得进展。 – iTEgg 2009-12-28 23:46:23

回答

5

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

  • 阅读了关于模型/视图/控制器在.net中看到构建项目像你
  • 阅读了关于使用线程为您的通信一个很好的方式,应该是简单

这听起来像你想要遵循设置你的应用程序的最佳做法。你会在这个问题上得到很多反馈,我想这些问题都会听起来像这样。帮你一个忙,跟着它。并远离交流逻辑的形式!

一些更多的想法:

我不知道你为什么要打破这种成三个屏幕时,两人似乎逻辑:1)网络设置对话框2)游戏对话框,可以同时容纳战舰用户界面和你的聊天界面。这种配置也可以简化你的结构,因为只有一个屏幕,游戏/聊天屏幕需要更新。设置对话框就是这样。

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

此外,这里有一个network enabled tic tac toe game的例子,可能会产生线索,以开发客户端/服务器游戏。

不要回避什么似乎很难!我的建议是先写一个没有UI的聊天/通信客户端,也许只是控制台输出。然后添加一个屏幕,你会发现你不必将窗口结婚到网络的东西。

祝你好运!

更多链接:

这里是一个不错discussion about MVC/MVP可以启发你的架构。 和here's another ...从不同的角度。

+0

您的信息一直很有帮助。谢谢。我将离开这个线程,因为我仍然希望获得关于多种表单相互沟通的信息。即时通讯采用多种形式在应用中提供一定的外观。 – iTEgg 2009-12-29 14:45:06

+0

我觉得需要声明一个封装游戏逻辑和UI逻辑的游戏结构。我认为这就是模型/视图/控制器的功能。但我还没有找到任何教程。您能否指出一本关于将应用程序逻辑从UI逻辑中分离出来的书?谢谢。 – iTEgg 2009-12-29 15:01:57

+0

@ikurtz:我在我的答案中添加了一些MVC教程链接。如果你真的专注于直接沟通的两种形式,你不需要任何东西比另一种提到另一种形式。这很容易,但如果最终导致循环依赖,那么存在面条编码和潜在的死锁风险。无论如何祝你好运。 – 2009-12-29 15:39:47

1

您应该将通信分隔到不同的类中(不在表单中)。但是,为了让表单与对方保持“同步”,可以使用c#事件(以及委托来处理它们)来通知某个表单发生了另一个表单上发生的事情。您正在使用事件来处理所有表单操作(鼠标按钮点击等),因此您应该对其工作原理有一个基本概念,并且网络上有大量关于“c#events”和“c#事件处理”的文章“(有一些搜索条件给你)会给你更多的信息,所以我不会在这里详细说明。事件的优点是系统保持松散耦合,任何人都可以订阅它们,因此未来添加第四种表单并让它“倾听”它所需的信息非常容易。