我正在執行一個使用backgroundWorker1
的DLL,它通過引用更新變量i
。要使用i
更新進度欄,我使用以下代碼。我也想顯示文字的百分比。問題是文本(而不是進度條)閃爍了很多。我怎樣才能減少/消除這種閃爍?增加睡眠時間不是一種選擇。減少/刪除進度條內部文本的閃爍
BackgroundWorker backgroundWorker1 = new BackgroundWorker();
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += (s, args) =>
{
Mydll.MyCFunction(ref i);
};
backgroundWorker1.RunWorkerAsync();
while (backgroundWorker1.IsBusy)
{
backgroundWorker1.ReportProgress(i * 100);
backgroundWorker1.ProgressChanged += (s, e) =>
{
progressBar1.Refresh();
progressBar1.Value = e.ProgressPercentage;
progressBar1.CreateGraphics().DrawString(e.ProgressPercentage.ToString() + "%",
SystemFonts.DefaultFont, Brushes.Black,
new PointF(progressBar1.Width/2 - 10, progressBar1.Height/2 - 7));
};
Application.DoEvents();
System.Threading.Thread.Sleep(200);
}
謝謝。
爲什麼要叫'progressBar1.Refresh()' – 2013-04-08 09:50:43
不應該訂閱ProgressChanged發生循環外? – Martheen 2013-04-08 09:52:25
我懷疑你的問題是'應用程序。DoEvents();' – DGibbs 2013-04-08 09:52:26