带有后台工作器的c#进度条

本文关键字:后台 工作 | 更新日期: 2023-09-27 18:07:00

我在UI中有一个进度条,我想改变它的进度与每个函数的执行,直到结束。我试过后台工作人员。我试图使用backgroundworker_dowork函数实现。我如何将它与我正在进行的功能同步。现在做的工作只是取得了最初的进步。如何在每次执行函数时都增加它。

我的代码是这样的:

private  void  Ok_Button_Click(object sender, EventArgs e)
    {
                    //set max sixe of progress bar
        elementForm.progressBar1.Maximum = 100;
        //// To report progress from the background worker we need to set this property
        elementForm.backgroundWorker1.WorkerReportsProgress = true;
        //// This event will be raised on the worker thread when the worker starts
        elementForm.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        //// This event will be raised when we call ReportProgress
        elementForm.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
       elementForm.backgroundWorker1.RunWorkerAsync();
method1();
progress=10;
method2();
progress=20
method3();
lastmethod();
progress=100;
}

基本上进度应该随着方法的执行而增加。每个方法都在做一些应该增加进度的事情,并且在最后一个名为progress的方法之后应该是100%。

backgroundWorker1_DoWork的代码(我应该在这里做什么来同步方法完成的进度增量)

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        if (elementForm.progressBar1.Value < elementForm.progressBar1.Maximum)
        {
            while(progress!=100)
            {
                elementForm.progressBar1.Increment(progress);
                elementForm.progressBar1.CreateGraphics().DrawString(progress.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(elementForm.progressBar1.Width / 2 - 10, elementForm.progressBar1.Height / 2 - 7));

            }
        }
    }

backgroundWorker1_ProgressChanged:

        private void backgroundWorker1_ProgressChanged(object sender,
           ProgressChangedEventArgs e)
    {
        if (elementForm.InvokeRequired)
        {
            elementForm.Invoke(new Action<object, ProgressChangedEventArgs>(backgroundWorker1_ProgressChanged), sender, e);
            return;
        }
        // The progress percentage is a property of e
        elementForm.progressBar1.Value = e.ProgressPercentage;
    }

带有后台工作器的c#进度条

感谢大家的评论。

我将我的功能放在Do_work中,我的进度条监控并与Do_work中的函数调用同步运行。