C#窗口形成与背景工作者的进展酒吧

时间:2011-07-18 17:15:33

标签: c# progress-bar add-in backgroundworker

我正在尝试在我的c#excel add in中添加进度条。进度条会出现,但在功能执行完毕之前它不会指示任何进度。

这些是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。

谢谢你!

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我想扩展以下声明。如果我错了,Matt Greer可以纠正我。

  

FUNCTIONTORUN做什么?它很可能会阻止UI线程,   导致您对进度条的更新直到它才会被看到   回报。更有可能的是,FUNCTIONTORUN需要在后台运行   工人,并让它定期报告进展情况,这就是在哪里   你要更新进度条。

我认为他的意思是你需要更新progressBar1.Value FUNCTIONTORUN(); 您仍然可以使用类似的方法。