带有后台工作程序的C#windows窗体进度条
我正在尝试在我的c#excel加载项中添加进度条。将显示进度条,但在函数完成执行之前,它不会指示任何进度 以下是Windows窗体类中的函数:带有后台工作程序的C#windows窗体进度条,c#,progress-bar,add-in,backgroundworker,C#,Progress Bar,Add In,Backgroundworker,我正在尝试在我的c#excel加载项中添加进度条。将显示进度条,但在函数完成执行之前,它不会指示任何进度 以下是Windows窗体类中的函数: public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i < 100; i++) { Thread.Sleep(100); b
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;
}
我应该如何更改此设置,以便在执行FUNCTIONTORUN()期间进度条不会停止工作?进度条是使用Visual Studio设计器初始化的。form类中progressbar对象的名称为progressbar1
谢谢大家! 进度条的
DoWork
事件应该是(或包含)functionorun()
FUNCTIONTORUN()
应使用ReportProgress
方法。进度条的DoWork
事件应为(或包含)FUNCTIONTORUN()
FUNCTIONTORUN()
应该使用ReportProgress
方法。FUNCTIONTORUN做什么?这很可能会阻塞UI线程,导致在进度条返回之前无法看到进度条的更新。更有可能的是,functionorun
需要在后台工作程序中运行,并让它定期报告进度,这就是更新进度条的地方 函数运行的作用是什么?这很可能会阻塞UI线程,导致在进度条返回之前无法看到进度条的更新。更有可能的是,functionorun
需要在后台工作程序中运行,并让它定期报告进度,这就是更新进度条的地方 我想进一步阐述一下下面的陈述。如果我错了,马特·格里尔可以纠正我
FUNCTIONTORUN做什么?很可能会阻塞UI线程,
使您对进度条的更新在完成之前不可见
返回。更有可能的是,FUNCTIONTORUN需要在后台运行
工人,并让其定期报告进度,这就是
你需要更新进度条
我相信他的意思是你需要更新progressBar1.Value
函数运行()您仍然可以使用类似的方法。我想对以下语句进行扩展。如果我错了,马特·格里尔可以纠正我 FUNCTIONTORUN做什么?很可能会阻塞UI线程, 使您对进度条的更新在完成之前不可见 返回。更有可能的是,FUNCTIONTORUN需要在后台运行 工人,并让其定期报告进度,这就是 你需要更新进度条 我相信他的意思是你需要更新progressBar1.Value 函数运行()您仍然可以使用类似的方法
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;
}