Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Winform应用程序按钮变得无响应_C#_Winforms_Button - Fatal编程技术网

C# Winform应用程序按钮变得无响应

C# Winform应用程序按钮变得无响应,c#,winforms,button,C#,Winforms,Button,我有一个在3.5框架下开发的winform应用程序。应用程序中的按钮会间歇性地失去响应。应用程序在标题中从不显示“不响应”,但它只是按钮。即使我在按钮点击代码中加了一个断点,当按钮被点击时控件也不会出现 原因可能是什么?可能是因为您正在UI线程中执行某些操作(访问数据库、连接到internet、读取文件等),所以它很忙 以下是解决方案: 永远不要在代码隐藏文件中包含业务逻辑(比如,永远不要在按钮单击方法、OnLoad方法等中包含业务逻辑) 使用MVC/MVP模式将业务逻辑与UI分离 始终异步执

我有一个在3.5框架下开发的winform应用程序。应用程序中的按钮会间歇性地失去响应。应用程序在标题中从不显示“不响应”,但它只是按钮。即使我在按钮点击代码中加了一个断点,当按钮被点击时控件也不会出现


原因可能是什么?

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

以下是解决方案:

  • 永远不要在代码隐藏文件中包含业务逻辑(比如,永远不要在按钮单击方法、OnLoad方法等中包含业务逻辑)
  • 使用MVC/MVP模式将业务逻辑与UI分离
  • 始终异步执行您的业务逻辑(工作线程、任务等),当您的业务逻辑被分离时,这是微不足道的

在确定接受率之前,最有可能的答案是按钮单击事件已丢失其句柄子句。在Vb.Net中,很容易看到句柄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);

您是在更新表单中的数据还是在等待数据库响应?你能给我们看一些代码来重现这个问题吗?谢谢。@Jeremy Thompson:当然,MVC,MVP在Winforms中也是可能的,尽管还没有很好的开发,也没有找到singelton文档,但推荐使用。在粗糙的语言中,您可以将业务逻辑和应用程序逻辑分开。请参阅:1。2. @哦,为什么ppl认为“代码隐藏”、“MVC”、“MVP”是网络术语?就因为ASP.NETMVC?!来吧,伙计们,严肃点。MVC/MVP是无处不在的设计模式,甚至在ASP.NET MVC发明之前就已经被使用:)它们是用于将BL与UI分离的模式,无论是web还是winforms,甚至是控制台,它们都是完全不可知的。这就是想法:你的观点可以是任何东西。微软P&P部门曾支持在这个框架中推荐和使用MVP的复合应用程序块…@AlexeyRaga-我非常了解MVC和MVP背后的概念,但目前还没有一个WinForm MVC/MVP框架像MVC3或WebFormsMVP.com这样的web开发框架那样得到很好的开发。有许多模式可以将BL与UI和DAL分开。即使是SO链接封送员指出的,也表明开发人员在Winforms中使用MVC是多么不情愿。同意不同意。代码隐藏是一个网络术语。您可以在aspx和.cs中使用代码,但在WinForms中没有等效的代码。有时异步执行业务逻辑并不更好——例如field Validation虽然Jeremy没有理解Alexy的意思,但他说“不要异步访问业务逻辑”是有道理的。异步数据库操作为许多错误创建了范围。必须小心-这是一个关于丢失按钮事件处理程序的问题,没有必要继续,Alexey可能住在离我不远的地方-我们边喝啤酒边聊吧!