我正在尝试在这里执行代码
http://www.dotnetperls.com/progressbar
这是我的代码。我吸引了一名背景工作者,并以编程方式添加了一个进度条。
我试过踩过代码,我尝试使用消息框来查看发生了什么,看起来它只执行for循环的一次迭代,这是在i = 0时,它似乎从那个到完成程序,并且进程程序永远不会被调用。
进度条永远不会从0更改值。
当我希望它进展到100时。
我确实尝试在program.cs中注释掉这行//Application.EnableVisualStyles();
以删除progerss bar所拥有的自然动画,但无论是哪种方式,注释或取消注释,jt甚至都没有运行for循环的每次迭代,它是在i = 0之后退出..并且后台工作者或进度条没有进展。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace backgroundworker2
{
public partial class Form1 : Form
{
ProgressBar progressBar1 = new ProgressBar();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// progressBar1.BackColor = Color.Red;
this.Controls.Add(progressBar1);
//progressBar1.Value = 100;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// textBox1.Text = "0";
for (int i = 0; i < 100; i++)
{
// MessageBox.Show("a"+i);
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("done");
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// textBox1.Text = Convert.ToString( e.ProgressPercentage);
progressBar1.Value = e.ProgressPercentage;
// MessageBox.Show("asdf");
}
}
}
答案 0 :(得分:1)
在Form1_Load
中,您运行了BackgroundWorker
但未将WorkerReportsProgress
属性设置为true
。默认值为false
。因此,在调用RunWorkerAsync()
方法之前,您需要添加此行:
backgroundWorker1.WorkerReportsProgress = true;