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。
谢谢!
进度条的DoWork
事件应该是(或包含(FUNCTIONTORUN()
。FUNCTIONTORUN()
应使用ReportProgress
方法。
FUNCTIONTORUN
做什么?它很可能会阻塞UI线程,导致进度条的更新在返回之前无法看到。更有可能的是,FUNCTIONTORUN
需要在后台工作程序中运行,并让它定期报告进度,这就是更新进度条的地方。
我想对以下语句进行扩展。如果我错了,马特·格里尔可以纠正我。
FUNCTIONTORUN做什么?它很可能会阻塞UI线程,导致您对进度条的更新直到退货。FUNCTIONTORUN很可能需要在后台运行工人,并让它定期报告进度,这就是你会更新进度条。
我相信他的意思是你需要更新progressBar1.ValueFUNCTIONTORUN((您仍然可以使用类似的方法。