首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适当的程序设计问题

适当的程序设计问题
EN

Stack Overflow用户
提问于 2010-05-29 20:57:04
回答 1查看 334关注 0票数 2

我有几个关于好的编程设计的问题。我将首先描述我正在建设的项目,这样你就可以更好地帮助我了。

我正在编写一个类似于TeamViewer、、CrossLoop的远程辅助工具。它将结合诸如UDP网络(使用利德格伦网络库)、NAT遍历(因为现在许多计算机在路由器后面是不可见的)、镜像驱动程序(使用DF幻影的镜像驱动程序(http://www.demoforge.com/dfmirage.htm)在远程计算机上实时抓取屏幕)等概念。

尽管如此,这个程序有一个客户-服务器体系结构的概念,但是我只制作了一个同时具有客户机和服务器功能的程序。这样,当用户运行我的程序时,他们可以在提供帮助和接受帮助之间切换,而不必下载单独的客户端或服务器模块。

我有一个Windows表单,允许用户在提供帮助和接收帮助之间进行选择。我有另一个Windows窗体用于文件资源管理器模块。我有另一个用于聊天模块的Windows表单。我有另一个Windows窗体,用于注册表编辑器模块。我有另一个Windows窗体用于活动控制模块。因此,我为每个模块提供了一个表单,这就引出了第一个问题:

1.我应该在相应的表单的代码中处理特定于模块的命令吗?意思是,我得到一个命令,其中包含一些数据,这些数据枚举了特定目录的远程用户的文件。显然,我必须在File窗体上更新它,并将条目添加到ListView中。不过,我应该在Windows窗体内处理这些代码吗?或者我应该在另一个类中处理这个问题(当然,我最终必须将数据传递给表单来绘制)。还是类似于混合处理另一个类中的大多数数据,并将最终结果传递给要绘制的表单?

所以我有5-6张表格,每个模块一张。用户启动我的程序,输入远程机器的ID (不是IP,ID,因为我们正在向中间服务器注册以启用NAT遍历)、他们的密码和连接。现在让我们假设连接成功了。然后,向用户提供一个包含所有不同模块的表单。因此,他可以打开一个文件资源管理器,或者他可以扰乱注册表编辑器,或者他可以选择与他的伙伴聊天。所以现在这个程序有点空闲,只是在等待用户做些什么。如果用户打开Live,那么程序将花费大部分时间从远程计算机接收数据包,并将它们绘制到表单中以提供“实时”视图。

2.第二个设计问题。问题1.如何将特定于模块的命令传递给它们各自的Windows窗体?的意思是,我有一个类似"NetworkHandler.cs“的类来检查来自远程计算机的消息。NetworkHandler.cs是一个全局可访问的静态类。因此,假设我得到一个命令,该命令枚举特定目录的远程用户文件。我将如何将该命令“授予”文件资源管理器表单。我正在考虑在OnCommandReceivedEvent中创建一个NetworkHandler,并让每个表单注册到该事件。当NetworkHandler收到命令时,它将引发事件,所有表单都将检查它是否相关,并且适当的表单将采取行动。这是一个合适的/最好的解决方案吗?

3.我使用的网络库Lidgren提供了两个检查网络消息的选项,可以轮询ReadMessage()返回null或消息,也可以使用AutoResetEvent OnMessageReceived (我猜这就像一个事件)。哪一个更合适?

EN

回答 1

Stack Overflow用户

发布于 2010-05-29 21:01:59

  1. 将尽可能少的代码放在表单中。您应该创建一个独立的类/类集来处理这个问题,并让表单使用它们来绘制。
  2. 一个活动似乎是个好主意。我不会让表单订阅,而是让另一个类进行处理,并将处理过的数据传递给表单(通过另一个事件)。
  3. 我会使用这个事件,因为它可能检查异步,这正是您想要的。您不希望在等待消息时锁定窗体。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2936582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档