c#带有backgroundworker的进度条

c#带有backgroundworker的进度条,c#,progress-bar,backgroundworker,C#,Progress Bar,Backgroundworker,我在UI中有一个进度条,我想随着每个函数的执行改变进度,直到结束。我试过和背景工作者一起工作。我正在尝试使用backgroundworker\u dowork函数实现。如何将其与正在进行的功能同步。现在做工作只是取得初步进展。如何在每次函数执行时增加它 我的代码是这样的: private void Ok_Button_Click(object sender, EventArgs e) { //set max sixe of progress b

我在UI中有一个进度条,我想随着每个函数的执行改变进度,直到结束。我试过和背景工作者一起工作。我正在尝试使用backgroundworker\u 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\u DoWork的代码(我应该在这里做什么来同步进度增量和方法完成)

private void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
if(elementForm.progressBar1.Value
backgroundWorker1\u 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;

    }
private void backgroundWorker1\u ProgressChanged(对象发送方,
ProgressChangedEventArgs(e)
{
if(elementForm.invokererequired)
{
调用(新操作(backgroundWorker1\u ProgressChanged),发送方,e);
回来
}
//进度百分比是e的一个属性
elementForm.progressBar1.Value=e.ProgressPercentage;
}

谢谢你的评论


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

请插入一些代码以显示您所做的工作。显示您的代码!请看右侧的相关列。这个网站上有几十个类似的问题。什么使您的问题不同?显示您以前尝试过的代码。您不应该以这种方式调用
CreateGraphics
,因为您从未处理正在创建的
Graphics
实例,从而导致泄漏。
        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;

    }