我正在尝试在我的c#excel add in中添加进度条。进度条会出现,但在功能执行完毕之前它不会指示任何进度。
这些是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。
谢谢你!
答案 0 :(得分:3)
进度条的DoWork
事件应为(或包含)FUNCTIONTORUN()
。 FUNCTIONTORUN()
应使用ReportProgress
方法。
答案 1 :(得分:2)
FUNCTIONTORUN
做什么?它很可能会阻止UI线程,导致进度条的更新在返回之前不会被看到。更有可能的是,FUNCTIONTORUN
需要在后台工作程序中运行,并让它定期报告进度,这就是您更新进度条的位置。
答案 2 :(得分:0)
我想扩展以下声明。如果我错了,Matt Greer可以纠正我。
FUNCTIONTORUN做什么?它很可能会阻止UI线程, 导致您对进度条的更新直到它才会被看到 回报。更有可能的是,FUNCTIONTORUN需要在后台运行 工人,并让它定期报告进展情况,这就是在哪里 你要更新进度条。
我认为他的意思是你需要更新progressBar1.Value FUNCTIONTORUN(); 您仍然可以使用类似的方法。