我使用VS2010和C#创建一个桌面应用程序。 此应用程序有一个形式与一个巨大的任务,需要花费大量的时间来完成。 当这种形式被初始化它完美的作品,除了显示“没有响应”的标题栏,像图为:
完成所有任务后,它显示所需的输出。 为什么显示这个消息,我该如何预防呢?
我使用VS2010和C#创建一个桌面应用程序。 此应用程序有一个形式与一个巨大的任务,需要花费大量的时间来完成。 当这种形式被初始化它完美的作品,除了显示“没有响应”的标题栏,像图为:
完成所有任务后,它显示所需的输出。 为什么显示这个消息,我该如何预防呢?
你需要使用一个BackgroundWorker从而使耗时的任务将在一个单独的线程异步方式运行。 这将允许Windows多任务处理,使UI响应。 您应该使用一个等待光标或一些其他视觉指示器让用户知道你的应用程序正忙。
从MSDN MSDN的BackgroundWorker
BackgroundWorker的类允许您在一个单独的专用线程上运行操作。 例如下载和数据库事务耗时的操作可能会导致用户界面(UI),以看起来好像它已经停止,而他们正在运行的响应。 当你想要一个负责任的UI,你都面临着这样的操作相关的长期拖延,BackgroundWorker的类提供了一个方便的解决方案。
要在后台执行耗时的操作,创建一个BackgroundWorker,并听取该报告您的操作进度,当你操作完成信号的事件。 您可以通过编程创建BackgroundWorker的,也可以从工具箱的组件选项卡将其拖动到您的窗体。 如果您在Windows窗体设计器创建BackgroundWorker的,它会出现在组件栏中,其属性将显示在属性窗口。
要设置后台操作,添加事件处理程序DoWork的事件。 在调用这个事件处理程序的耗时的操作。 要开始操作,调用的RunWorkerAsync。 为了接收进度更新的通知,处理ProgressChanged事件。 要接收通知操作完成时,处理RunWorkerCompleted事件。
你需要运行在后台线程你艰巨的任务,以免锁定了UI(主)线程。