2011-08-19 21 views
8

我有一个程序可以完成一些可以持续几分钟的复制作业(通过File.Copy)。当用户在此时将另一个窗口带到前台时,程序窗口变为空白,因为它不会自我重绘。C#窗口在繁忙时变为空白 - >进度条?但是如何?

现在我想在屏幕中心的额外窗口中显示ProgressBar,但该窗口也是空白的。

所以我在另一个线程启动它并没有帮助。

我很确定有人这样做过,但我找不到工作示例。有任何想法吗?

+3

在BackgroundWorkerThread中执行长时间运行的进程。 – ChrisF

回答

4

BackgroundWorker class的文档中有一个很好的例子。

+0

谢谢。这样的事情太难以发现,如果你不知道你到底在找什么......谁会认为这是一个组件?^^ – ihavenoaccount

+0

这就是为什么创建了stackoverflow)不客气! – artplastika

0

您可以使用BackgroundWorker类。

看到这个answer.

0

ChrisF是正确的。您的长时间操作应该在BackgroundWorker线程中完成。您可以使用BackgroundWorker报告进度,并将其与表单上的进度栏挂钩。

0

您需要使用BackgroundWorker线程操作您的操作。还有其他方法可以对该操作进行线程化,但是这可能是最简单的方法,并且会继续在前台执行消息泵,因此Windows不认为您的应用程序已停止响应。

另一种选择是使用Thread,并使用Thread.Join等待后台任务来完成,因为Thread.Join也发送标准的消息泵的信息到Windows在等待。