我有一个程序可以完成一些可以持续几分钟的复制作业(通过File.Copy)。当用户在此时将另一个窗口带到前台时,程序窗口变为空白,因为它不会自我重绘。C#窗口在繁忙时变为空白 - >进度条?但是如何?
现在我想在屏幕中心的额外窗口中显示ProgressBar,但该窗口也是空白的。
所以我在另一个线程启动它并没有帮助。
我很确定有人这样做过,但我找不到工作示例。有任何想法吗?
我有一个程序可以完成一些可以持续几分钟的复制作业(通过File.Copy)。当用户在此时将另一个窗口带到前台时,程序窗口变为空白,因为它不会自我重绘。C#窗口在繁忙时变为空白 - >进度条?但是如何?
现在我想在屏幕中心的额外窗口中显示ProgressBar,但该窗口也是空白的。
所以我在另一个线程启动它并没有帮助。
我很确定有人这样做过,但我找不到工作示例。有任何想法吗?
在BackgroundWorker class的文档中有一个很好的例子。
谢谢。这样的事情太难以发现,如果你不知道你到底在找什么......谁会认为这是一个组件?^^ – ihavenoaccount
这就是为什么创建了stackoverflow)不客气! – artplastika
您可以使用BackgroundWorker类。
看到这个answer.
ChrisF是正确的。您的长时间操作应该在BackgroundWorker线程中完成。您可以使用BackgroundWorker报告进度,并将其与表单上的进度栏挂钩。
您需要使用BackgroundWorker
线程操作您的操作。还有其他方法可以对该操作进行线程化,但是这可能是最简单的方法,并且会继续在前台执行消息泵,因此Windows不认为您的应用程序已停止响应。
另一种选择是使用Thread
,并使用Thread.Join
等待后台任务来完成,因为Thread.Join
也发送标准的消息泵的信息到Windows在等待。
在BackgroundWorkerThread中执行长时间运行的进程。 – ChrisF