C#窗口与后台工作人员形成进度条

本文关键字:工作人员 窗口 后台 | 更新日期: 2023-09-27 18:02:20

我正试图在我的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;
    }

这就是我从加载项按钮调用函数的方式:

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

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

谢谢!

C#窗口与后台工作人员形成进度条

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

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

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

FUNCTIONTORUN做什么?它很可能会阻塞UI线程,导致您对进度条的更新直到退货。FUNCTIONTORUN很可能需要在后台运行工人,并让它定期报告进度,这就是你会更新进度条。

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