简体   繁体   English

进度栏未在C#中刷新

[英]Progress bar not refreshing in c#

I have a problem, I am using backgroundWorker1.RunWorkerAsync() in on button_click method, and using backgroundWorker1_DoWork() , backgroundWorker1_ProgressChanged() events also, all events are triggering but progress bar is not refreshing. 我有一个问题,我使用backgroundWorker1.RunWorkerAsync()在button_click方法,以及使用backgroundWorker1_DoWork() backgroundWorker1_ProgressChanged()事件也,所有的事件触发,但进度条不清爽。 here is my code : 这是我的代码:

private void btnMove_Click(object sender, EventArgs e)
        {

            try
           {

               backgroundWorker1.RunWorkerAsync();

                for (int i = 0; i < gdFiles.Rows.Count - 1; i++)
                {
                    // my process
                 }

              catch (Exception ex)
            {

            }

        }
     }

And events are 事件是

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {

                backgroundWorker1.ReportProgress(i);
                Thread.Sleep(100);
            }
        }


        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            progressBar1.Refresh();
        }

Can any one please help on this..... 有人可以帮忙吗.....

Check the value of backgroundWorker1.WorkerReportsProgress it should be set to true. 检查backgroundWorker1.WorkerReportsProgress的值,应将其设置为true。 Bellow working and tested example: 波纹管工作和测试示例:

public partial class Form1 : Form
{
    private BackgroundWorker bw = new BackgroundWorker();

    public Form1()
    {
        InitializeComponent();

        bw.WorkerReportsProgress = true;
        bw.WorkerSupportsCancellation = true;
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
    }

    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {

    }

    void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {

            bw.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        bw.RunWorkerAsync();
    }
}

I've tried to replicate your problem and it works fine on my end. 我已经尝试过复制您的问题,但最终效果良好。 Make sure backgroundWorker1.ReposrtsProgress is set to True . 确保backgroundWorker1.ReposrtsProgress设置为True See code below: 参见下面的代码:

   'private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {

            backgroundWorker1.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
        progressBar1.Refresh();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
    }`

Also, I think your "process" should be inside DoWork. 另外,我认为您的“过程”应该在DoWork内部。

Shouldn't you move your filemoving logic to the DoWork part? 您不应该将文件移动逻辑移到DoWork部分吗? The idea of a BackgroundWorker is to remove the heavy stuff from the UI-thread. BackgroundWorker的想法是从UI线程中删除繁重的工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM