Windows窗体:进度条无响应

我有一个小应用程序来转换几种文件格式,主窗口forms包含几个文本框,按钮等。我有另一个“文档”类,它处理所有的实际转换工作,我的表单基本上迭代所有的文件,并调用适当的Document方法来转换文件。 然而,当这种情况发生时,表单会停止响应。 我创建了另一个简单的表单,其中包含一个进度条和一个取消按钮,当转换开始向我们(容易被叮叮当当的)用户提供一些反馈时,它会产生。 但是,当新表单加载时,所有控件都是白色框,并且它也停止响应。 转换完成后,进度条将正常关闭,主窗体将再次响应。

是否有一种简单的方法可以使这两种forms独立,这样即使另一种forms没有反应,进度条也可以运行?

最简单的解决方案是使用BackgroundWorker组件在后台线程上完成处理。 您可以从VS工具箱中将其拖入。 它允许您使用进度通知更新UI线程,以便您可以更新进度条以显示实际值(比使用“选取框”样式进度条更加用户友好)。

您应该使用两个线程,以便在您工作时表单继续响应。

这是如此常见,以至于.NET有一个BackgroundWorker控件可以为你包装一些。

只需偶尔调用Application.DoEvent(),可能在你的循环中。 不像BackgroundWorker那样正确,但它更简单。

最简单的解决方案是使用BackgroundWorker组件在后台线程上完成处理。 您可以从VS工具箱中将其拖入。 它允许您使用进度通知更新UI线程,以便您可以更新进度条以显示实际值(比使用“选取框”样式进度条更加用户友好)。