Я пытаюсь добавить индикатор выполнения (стиль MARQUEE) в мою надстройку c # excel. Индикатор выполнения отображается, но не показывает никакого прогресса до завершения выполнения функции, то есть он остается замороженным.
Это функции в классе Windows Form:
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
.