繁体   English   中英

C# windows 窗体进度条与后台工作人员

[英]C# windows form progress bar with background worker

我正在尝试在我的 c# excel 中添加进度条。进度条出现,但在 function 完成执行之前它不指示任何进度。

这些是 Windows 表格 Class 中的函数:

    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;

    }

这就是我从添加按钮调用 function 的方式:

    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 设计器初始化进度条。 class 形式的进度条 object 的名称是 progressbar1。

谢谢你!

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM