簡體   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