我正在尝试使用backgroundworker更新我的进度条。只有这个不起作用。这是我的代码:
private BackgroundWorker _worker;
public Form1(string[] args)
{
InitializeComponent();
// Backgroundworker to update the progressbar
_worker = new BackgroundWorker();
_worker.WorkerReportsProgress = true;
_worker.ProgressChanged += worker_ProgressChanged;
_worker.DoWork += worker_DoWork;
_worker.RunWorkerCompleted += worker_WorkCompleted;
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
SendItems();
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void worker_WorkCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_running = false;
HandleGui();
}
private bool SendItems()
{
try
{
GetEvaluationDocumentsToSend();
_worker.ReportProgress(16);
GetModifiedEvaluationDocumentsToSend();
_worker.ReportProgress(32);
GetTasksToSend();
_worker.ReportProgress(48);
GetPostToSend();
_worker.ReportProgress(64);
GetContractDocumentsToSend();
_worker.ReportProgress(80);
GetModifiedContractDocumentsToSend();
_worker.ReportProgress(100);
return true;
}
catch (Exception e)
{
Log.WriteLog(e.ToString());
MessageBox.Show(
"The following error occured while sending the items: \r\n" + e.ToString(),
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
return false;
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
_worker.RunWorkerAsync();
}
我没有收到任何错误,但我的进度条不会更新。我做错了什么?
答案 0 :(得分:3)
它适用于我的机器。 GetEvaluationDocumentsToSend()
做了什么?也许它比其他方法花费的时间更长,所以看起来没有进展,因为所有的进展几乎是瞬间完成的?此外,HandleGui()
做什么以及_running
用于什么?
答案 1 :(得分:2)
您没有启动BackgroundWorker!
在事件订阅后添加此行:
_worker.RunWorkerAsync();
编辑: 现在代码显示您调用RunWorkerAsync()
尝试在每次进度后添加Thread.Sleep(1000)以查看您的进程是否过快......
答案 2 :(得分:0)
尝试围绕进度条更新添加Invoke / BeingInvoke调用:
this.BeginInvoke((MethodInvoker)delegate
{
progressBar1.Value = e.ProgressPercentage;
});
这通常是UI没有更新的原因。