【发布时间】:2012-11-14 10:16:49
【问题描述】:
关于如何实现进度条有很多问题,我相信我已经通过所有这些问题,但我仍然不知道为什么我的进度条不起作用。
嗯,看来是要等操作完成后才起作用,这当然不是我想要的。我希望进度条能够正常工作,因为主要操作正在做它的事情。
我的代码很长而且很痛苦,所以我将对其进行简化,使其尽可能基本。
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
//Main UI Operation
}
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
// Wait 100 milliseconds.
Thread.Sleep(100);
// Report progress.
backgroundWorker1.ReportProgress(i); }
}
private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
就像我说的,我只在主 UI 操作后才看到进度条。
WorkerReportsProgress 设置为 True。 最小值和最大值分别为 0 和 100。
我觉得这可能是对线程缺乏了解。
【问题讨论】:
-
“// 主 UI 操作”是否意味着活动发生在此处而您已将其忽略?如果是这样,那是你的问题。如果
button1_Click()立即返回,则问题出在其他地方。 -
Siride,“\\Main UI Operation”是我调用需要大量时间才能完成的方法的地方。为什么这是一个问题,我该如何解决?我的方法是否准确,或者您会采取不同的方式吗?
-
您是否确保将事件连接到回调。打开后台worker的属性,点击闪电,就可以看到事件回调了。确保您需要的那些具有适当的方法名称。我测试了你的代码,但发现我错过了这一步。
标签: c# multithreading progress-bar