[英]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.