我想知道在WinForm中定义事件处理程序的正确方法是什么。我这样问,因为我有一个应用程序,只有一些事件处理程序内部有逻辑,而其他的只是调用其他地方定义的方法。这是好吗?,我有点担心,因为也许是一个坏的设计,在给定的时刻它会给我麻烦。让内部密集逻辑的事件处理程序是不好的模式?什么是Windows窗体中事件处理程序的常见设计模式
0
A
回答
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就是为此而设计的。这并不容易,只有在需要解决实际问题的情况下才能使用。不要假设任何事情。
相关问题
- 1. 什么是任何Windows窗体应用程序最常见的设计模式?
- 2. 什么是常见的Windows服务设计模式?
- 3. 窗体事件处理模式
- 4. Observer模式的常见错误处理机制是什么?
- 5. C#Windows窗体的设计模式
- 6. 处理安装程序中常见文件的常见/最佳方式是什么?
- 7. Windows窗体应用程序中未处理的异常
- 8. 关闭模式弹出式窗口的事件处理程序
- 9. 在窗体中处理多模式的设计建议
- 10. C++设计事件处理程序类
- 11. .NET Windows窗体事件触发的顺序是什么?
- 12. Java,设计模式:多个事件源和一个事件处理程序
- 13. 在.NET中找到Windows窗体控件的所有事件处理程序
- 14. Windows多窗体应用程序设计
- 15. 处理同步变量的最佳设计模式是什么?
- 16. 处理命令行参数的设计模式是什么
- 17. 为什么这是jQuery事件处理程序中的窗口对象?
- 18. 设计模式:异常/错误处理
- 19. 什么是Java中的表单加载事件处理程序?
- 20. 谁在Windows窗体程序中调用窗体加载事件?
- 21. 什么是用于为C#Windows窗体应用程序设计样式的组件库?
- 22. 在Windows窗体中未处理的非UI线程异常
- 23. 为什么异常传播出事件处理程序?
- 24. 什么是处理在Windows窗体应用程序连接字符串的最佳方法是什么?
- 25. 什么是最常用的软件设计模式?
- 26. 事件处理程序的Windows Phone 7
- 27. 在Web窗体类中控制访问事件处理程序
- 28. .net中的设计模式是什么?
- 29. 将线程中的事件调用同步到Windows窗体上的事件处理程序
- 30. 设计模式 - 这是什么模式?
这是预期的设计。 Windows是一个事件驱动的环境。您必须执行代码的唯一可能位置是响应用户启动的事件。这不是一个固有的坏模式。还有其他选择,但在不了解更多关于您正在执行的特定逻辑的情况下,提出合理的建议是不可能的(也为时过早)。 – 2011-01-12 00:34:07