Im пытается обновить индикатор выполнения при выполнении некоторых проверок типов данных в отдельном потоке, и, кажется, существует задержка между тем, какое значение имеет индикатор выполнения, и значение, которое на самом деле отображается.control.invoke() issue
Следующий код выполняется потоком без 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();
}
}
Я загрузил снимок экрана, показывающий индикатор выполнения и фактические значения. Любые идеи ???
Благодаря
Вы пробовали использовать 'statusBar.Invoke (incrementPB, sender, e);'? – Steve
Пробовал и статусBar.Invoke (incrementPB, sender, e); и statusBar.Invoke (incrementPB (отправитель, e)); ни работать. –
@ Ken2K, спасибо за сортировку изображения. –