[英]Progress bar not refreshing in c#
我有一個問題,我使用backgroundWorker1.RunWorkerAsync()
在button_click方法,以及使用backgroundWorker1_DoWork()
backgroundWorker1_ProgressChanged()
事件也,所有的事件觸發,但進度條不清爽。 這是我的代碼:
private void btnMove_Click(object sender, EventArgs e)
{
try
{
backgroundWorker1.RunWorkerAsync();
for (int i = 0; i < gdFiles.Rows.Count - 1; i++)
{
// my process
}
catch (Exception ex)
{
}
}
}
事件是
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
Thread.Sleep(100);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
progressBar1.Refresh();
}
有人可以幫忙嗎.....
檢查backgroundWorker1.WorkerReportsProgress
的值,應將其設置為true。 波紋管工作和測試示例:
public partial class Form1 : Form
{
private BackgroundWorker bw = new BackgroundWorker();
public Form1()
{
InitializeComponent();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
bw.ReportProgress(i);
Thread.Sleep(100);
}
}
private void button1_Click(object sender, EventArgs e)
{
bw.RunWorkerAsync();
}
}
我已經嘗試過復制您的問題,但最終效果良好。 確保backgroundWorker1.ReposrtsProgress設置為True 。 參見下面的代碼:
'private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
Thread.Sleep(100);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
progressBar1.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}`
另外,我認為您的“過程”應該在DoWork內部。
您不應該將文件移動邏輯移到DoWork部分嗎? BackgroundWorker的想法是從UI線程中刪除繁重的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.