如何防止窗口标题栏上的“无响应”消息?

时间:2012-06-14 02:17:16

标签: c# winforms response

我使用VS2010和C#构建桌面应用程序。此应用程序有一个表单,其中包含大量任务,需要花费大量时间才能完成。初始化此表单时,它会完美运行,但在标题栏上显示“Not Responding”,如图所示:

enter image description here

完成所有任务后,它会显示所需的输出。为什么会显示此消息,如何阻止它?

2 个答案:

答案 0 :(得分:5)

您需要使用BackgroundWorker,以便耗时的任务将异步运行在单独的线程中。这将允许Windows多任务处理使UI响应。您应该使用等待光标或其他可视指示器让用户知道您的应用程序正忙。

来自MSDN MSDN BackgroundWorker

  

BackgroundWorker类允许您在单独的专用线程上运行操作。下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时停止响应。当您需要响应式UI并且您遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案。

     

要在后台执行耗时的操作,请创建BackgroundWorker并侦听报告操作进度的事件,并在操作完成时发出信号。您可以以编程方式创建BackgroundWorker,也可以从“工具箱”的“组件”选项卡将其拖到窗体上。如果在Windows窗体设计器中创建BackgroundWorker,它将显示在“组件托盘”中,其属性将显示在“属性”窗口中。

     

要设置后台操作,请为DoWork事件添加事件处理程序。在此事件处理程序中调用耗时的操作。要启动该操作,请调用RunWorkerAsync。要接收进度更新通知,请处理ProgressChanged事件。要在操作完成时接收通知,请处理RunWorkerCompleted事件。

答案 1 :(得分:1)

您需要在后台线程上运行您的巨大任务,以免锁定UI(主)线程。