C#:在漫长的过程中显示模态进度对话框

时间:2010-07-07 15:49:50

标签: c# multithreading

我的软件需要存储某些特定位置的目录和注册表结构。这通常需要很长时间。假设我有一个名为SaveState()的方法可以做到这一点。

我想将它包装到另一个方法SaveStateWithProgress()中,这样当我调用它时,会出现一个模态对话框,它会显示一个简单的进度条,并有一个取消操作的按钮。我看到它的方式我可能需要使用两个线程,虽然在VB6或Java中我过去使用相当于Thread.Yield()命令 - 不确定它是否是最佳实践,即使有类似的东西在C#中。最好的方法是什么?

4 个答案:

答案 0 :(得分:6)

C#中最好的方法是使用BackgroundWorker并在后台工作程序中运行密集操作。

Here is a tutorial,其中包含有关如何取消中途操作的说明。

答案 1 :(得分:4)

这是site,我认为这将满足您的需求。

它有使用进度条和后台工作程序的示例(使用BackgroundWorker.RunWorkerAsync())。

答案 2 :(得分:-1)

在C#中,您可以调用Thread.Sleep(0)Thread.Sleep(1)来执行与Java Thread.Yield()相同的操作。

话虽如此,你肯定需要在一个单独的线程中进行SaveState()。在SaveState()函数中有一个变量,随着SaveState()进展而更新。在计算机进度表单中放置一个计时器控件,让计时器检查SaveState()正在更新的变量。适当更新进度条

答案 3 :(得分:-2)

ProgressBar p = new ProgressBar();
p.Location = new Point(10, 10);
p.Size = new Size(100, 30);
p.MarqueeAnimationSpeed = 30;
p.Style = ProgressBarStyle.Marquee;