Я пытаюсь обновить индикатор выполнения, выполняя некоторые проверки типов данных в отдельном потоке, и кажется, что существует задержка между значением индикатора выполнения и значением, которое фактически отображается.
Следующий код выполняется потоком не-GUI и используется для вызова события.
protected virtual void OnUpdateProgressBar(object sender, ProgressBarEventArgs e)
{
EventHandler<ProgressBarEventArgs> TempHandler = UpdateProgressBar;
//Avoid possible race condition.
if (TempHandler != null)
{
TempHandler(this, e);
}
}
Я создал отдельный класс для обновления индикатора выполнения, и когда я создаю его экземпляр, я передаю ссылку на индикатор выполнения. Ниже весь класс.
public class ProgressBarChanged
{
ProgressBar statusBar;
public ProgressBarChanged(ProgressBar pb)
{
statusBar = pb;
statusBar.Value = 0;
}
public ProgressBarChanged()
{
}
public void subscribeToEvent(DataVerification test)
{
test.UpdateProgressBar += new EventHandler<ProgressBarEventArgs>(incrementPB);
}
public void incrementPB(object sender, ProgressBarEventArgs e)
{
Action action = () =>
{
if (e.CurrentRow == e.FinalRow - 10)
{
int i = 5;
}
statusBar.Maximum = e.FinalRow;
statusBar.Value = e.CurrentRow;
};
if(statusBar.InvokeRequired)
statusBar.Invoke(action);
else
action();
}
}
Я загрузил снимок экрана, показывающий индикатор выполнения и фактические значения.
Есть идеи ???
Спасибо