【发布时间】:2011-07-28 21:50:31
【问题描述】:
我正在尝试在我的 c# excel 插件中添加进度条(MARQUEE 样式)。进度条出现,但在函数完成执行之前它不指示任何进度,这意味着它保持冻结状态。
这些是 Windows 窗体类中的函数:
public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(100);
//run in back thread
backgroundWorker1.ReportProgress(i);
}
}
//call back method
public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
//call back method
public void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
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() 应该在后台工作人员上,但我该怎么做呢?由于它是一个选框进度条,我根本不需要更新进度条的值,它只需要运行到FUNCTIONTORUN() 结束。请注意,FUNCTIONTORUN() 会更新 Excel 工作表的单元格。
使用 Visual Studio 设计器初始化进度条。表单类中ProgressBar对象的名称为progressbar1。
【问题讨论】:
标签: c# excel progress-bar add-in backgroundworker