【问题标题】:Winform application Buttons becoming unresponsiveWinform 应用程序按钮变得无响应
【发布时间】:2012-02-06 08:52:48
【问题描述】:

我有一个在 3.5 框架下开发的 winform 应用程序。间歇性地,应用程序中的按钮变得无响应。该应用程序从不在标题中显示“未响应”,而只是按钮。即使我在按钮点击代码中设置了一个断点,当按钮被点击时,控件也永远不会出现!!!

可能是什么原因?

【问题讨论】:

  • 您是在更新表单中的数据还是在等待数据库响应?你能告诉我们一些代码来重现这个问题吗?谢谢。

标签: c# winforms button


【解决方案1】:

可能的原因是您正在 UI 线程中执行某些操作(访问数据库、连接到 Internet、读取文件等),所以它很忙。

解决办法如下:

  • 永远不要在代码隐藏文件中包含业务逻辑(例如,永远不要在 Button_Click 方法、OnLoad 方法等中包含它)。
  • 使用 MVC/MVP 模式将您的业务逻辑与 UI 分离。
  • 始终异步执行您的业务逻辑(工作线程、任务等),如果您将业务逻辑分开,这很简单。

【讨论】:

  • @Jeremy Thompson:当然,MVC、MVP 在 Winforms 中也是可能的,虽然开发得不是很完善,也没有找到单条文档,但还是推荐使用。用粗略的语言,您可以分离您的业务逻辑和应用程序逻辑。请参考:1.stackoverflow.com/questions/654722/… 2.social.msdn.microsoft.com/Forums/en-NZ/architecturegeneral/…
  • @JeremyThompson 哦,为什么人们认为“代码背后”、“MVC”、“MVP”是网络术语?仅仅因为 ASP.NET MVC?!来吧,伙计们,认真点。 MVC/MVP 是无处不在的设计模式,甚至在 ASP.NET MVC 发明之前就已使用 :) 它们是用于将 BL 与 UI 分开的模式,无论是 Web 还是 Winform 甚至控制台,它们都是完全不可知的。这就是想法:您的 View 可以是任何东西。 MS P&P 部门曾经支持 Composite Application Block,在这个框架中推荐并使用了 MVP...
  • @AlexeyRaga - 我非常了解 MVC 和 MVP 背后的概念,但是 afaik 没有像 MVC3 或 WebFormsMVP 这样的 Web 开发框架那样完善的 WinForm MVC/MVP 框架。 com。有许多模式可以将 BL 与 UI 和 DAL 分开。甚至 Marshal 指出的 SO 链接也显示了开发人员是多么不愿意在 Winforms 中使用 MVC。同意不同意。对于 Code-Behind,它是一个 Web 术语。您可以在 aspx 和 .cs 中有代码,但在 WinForms 中没有等效的代码。有时,异步执行业务逻辑并不好 - 例如字段验证
  • 虽然 Jeremy 没有理解 Alexy 的简单含义,但他说“不要异步访问业务逻辑”是有道理的。异步数据库操作为许多错误创造了空间。一定要小心
  • meh - 这是关于缺少 Button 事件处理程序的问题,无需继续,Alexey 可能就住在我附近 - 我们会边喝啤酒边聊!跨度>
【解决方案2】:

在您修复接受率之前,最可能的答案是 Button Click 事件丢失了它的 Handles 子句。在 Vb.Net 中很容易看到 Handles xyz 事件:

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

在 c# 中,您必须深入了解表单构造函数中的 InitializeComponent (F12) 调用。然后检查您的点击分配了事件的按钮:

this.Button1.Click += new System.EventHandler(this.Button1_Click);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多