带有后台工作程序的C#windows窗体进度条

带有后台工作程序的C#windows窗体进度条,c#,progress-bar,add-in,backgroundworker,C#,Progress Bar,Add In,Backgroundworker,我正在尝试在我的c#excel加载项中添加进度条。将显示进度条,但在函数完成执行之前,它不会指示任何进度 以下是Windows窗体类中的函数: public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i < 100; i++) { Thread.Sleep(100); b

我正在尝试在我的c#excel加载项中添加进度条。将显示进度条,但在函数完成执行之前,它不会指示任何进度

以下是Windows窗体类中的函数:

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

            Thread.Sleep(100);

            backgroundWorker1.ReportProgress(i); //run in back thread


        }

    }



    public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) //call back method
    {

        progressBar1.Value = e.ProgressPercentage;

    }

    public void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) //call back method
    {

        progressBar1.Value = progressBar1.Maximum;

    }
我应该如何更改此设置,以便在执行FUNCTIONTORUN()期间进度条不会停止工作?进度条是使用Visual Studio设计器初始化的。form类中progressbar对象的名称为progressbar1


谢谢大家!

进度条的
DoWork
事件应该是(或包含)
functionorun()
FUNCTIONTORUN()
应使用
ReportProgress
方法。

进度条的
DoWork
事件应为(或包含)
FUNCTIONTORUN()
FUNCTIONTORUN()
应该使用
ReportProgress
方法。

FUNCTIONTORUN做什么?这很可能会阻塞UI线程,导致在进度条返回之前无法看到进度条的更新。更有可能的是,
functionorun
需要在后台工作程序中运行,并让它定期报告进度,这就是更新进度条的地方

函数运行的作用是什么?这很可能会阻塞UI线程,导致在进度条返回之前无法看到进度条的更新。更有可能的是,
functionorun
需要在后台工作程序中运行,并让它定期报告进度,这就是更新进度条的地方

我想进一步阐述一下下面的陈述。如果我错了,马特·格里尔可以纠正我

FUNCTIONTORUN做什么?很可能会阻塞UI线程, 使您对进度条的更新在完成之前不可见 返回。更有可能的是,FUNCTIONTORUN需要在后台运行 工人,并让其定期报告进度,这就是 你需要更新进度条

我相信他的意思是你需要更新progressBar1.Value
函数运行()您仍然可以使用类似的方法。

我想对以下语句进行扩展。如果我错了,马特·格里尔可以纠正我

FUNCTIONTORUN做什么?很可能会阻塞UI线程, 使您对进度条的更新在完成之前不可见 返回。更有可能的是,FUNCTIONTORUN需要在后台运行 工人,并让其定期报告进度,这就是 你需要更新进度条

我相信他的意思是你需要更新progressBar1.Value 函数运行()您仍然可以使用类似的方法

    private void buttonClicked(object sender, RibbonControlEventArgs e)
    {
        AddInPlanView.Form1 pBar = new AddInPlanView.Form1();

        pBar.Visible = true;

        pBar.backgroundWorker1.WorkerReportsProgress = true;

        pBar.backgroundWorker1.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(pBar.backgroundWorker1_ProgressChanged);

        pBar.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(pBar.backgroundWorker1_DoWork);

        pBar.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(pBar.backgroundWorker1_RunWorkerCompleted);

        pBar.backgroundWorker1.RunWorkerAsync();

        FUNCTIONTORUN();

        pBar.Visible = false;

    }