私は別のスレッドでいくつかのデータ型チェックを行っている間にプログレスバーを更新しようとしていますが、進捗バーの値と実際に表示される値の間に遅延があるようです。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
statusBar.Invoke(incrementPB、sender、e)の両方を試しました。 statusBar.Invoke(incrementPB(sender、e));どちらも働かない。 –
@ Ken2K、画像を並べ替えてくれてありがとう。 –