我的软件需要存储某些特定位置的目录和注册表结构。这通常需要很长时间。假设我有一个名为SaveState()
的方法可以做到这一点。
我想将它包装到另一个方法SaveStateWithProgress()
中,这样当我调用它时,会出现一个模态对话框,它会显示一个简单的进度条,并有一个取消操作的按钮。我看到它的方式我可能需要使用两个线程,虽然在VB6或Java中我过去使用相当于Thread.Yield()
命令 - 不确定它是否是最佳实践,即使有类似的东西在C#中。最好的方法是什么?
答案 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;