2011-01-11 55 views
0

我想知道在WinForm中定义事件处理程序的正确方法是什么。我这样问,因为我有一个应用程序,只有一些事件处理程序内部有逻辑,而其他的只是调用其他地方定义的方法。这是好吗?,我有点担心,因为也许是一个坏的设计,在给定的时刻它会给我麻烦。让内部密集逻辑的事件处理程序是不好的模式?什么是Windows窗体中事件处理程序的常见设计模式

+0

这是预期的设计。 Windows是一个事件驱动的环境。您必须执行代码的唯一可能位置是响应用户启动的事件。这不是一个固有的坏模式。还有其他选择,但在不了解更多关于您正在执行的特定逻辑的情况下,提出合理的建议是不可能的(也为时过早)。 – 2011-01-12 00:34:07

回答

0

事件处理程序的复杂逻辑在某些情况下不好,但并非总是如此。通常不好的事情是在处理程序中做很多工作来重新绘制数据网格或类似的会导致GUI闪烁的单元。你可以使这样的处理程序异步。 只要你防御再次出现crossthreadedoperationexceptions,就可以从事件处理程序中调用其他方法。 但是,您必须考虑您的架构需求并从那里跳转。

0

事件处理程序与密集逻辑里面是一个坏模式?

如果你自己问这个问题:是的。可能会有一些例外,但UI事件处理程序中的代码太多通常是不良设计的标志。

你应该看看MVP(MVP-Passive View和MVP-Supervising控制器),甚至MVVM和MVC。这些是用于分离演示逻辑的最“着名”的设计模式。
就我个人而言,我更喜欢WinForms中的MVP-Passive View,但对此有很多意见。

1

在Winforms事件处理程序中,通常不会限制您的操作。但它有副作用,很容易看到你自己,如果你做了很多工作,然后用户界面变得紧张。它不再响应鼠标点击,它不再重绘自己。大约3秒后,Windows用标题栏中的“Not Responding”用ghost窗口替换表单。

您必须编写大量代码才能触发该情况,一秒钟超过4个机器指令。典型的UI冻结是由等待其他事情完成工作而引起的,例如dbase查询。

这是丑陋的,并没有给人留下很好的印象。并且可以让使用你的用户界面不舒服。用户没有回应的按钮就没有什么特别的了。你会使用工作线程来解决这个问题,BackGroundWorker就是为此而设计的。这并不容易,只有在需要解决实际问题的情况下才能使用。不要假设任何事情。

相关问题