无法使用代码获取进度条动画,不会调用progresschanged

时间:2016-06-04 03:06:38

标签: c# winforms backgroundworker

我正在尝试在这里执行代码

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");
        }
    }

}

1 个答案:

答案 0 :(得分:1)

Form1_Load中,您运行了BackgroundWorker但未将WorkerReportsProgress属性设置为true。默认值为false。因此,在调用RunWorkerAsync()方法之前,您需要添加此行:

backgroundWorker1.WorkerReportsProgress = true;