我試圖更新一個進度條,同時在一個單獨的線程上做一些數據類型檢查,似乎進度條的值和實際顯示的值之間有一個延遲。control.invoke()問題
以下代碼由非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 2012-03-09 16:21:02
試了兩個statusBar.Invoke(incrementPB,發件人,e);和statusBar.Invoke(incrementPB(sender,e));既沒有工作。 – 2012-03-09 16:24:06
@ Ken2K,感謝您整理圖片。 – 2012-03-09 16:27:13