Я использую индикатор выполнения, чтобы показать пользователю ход выполнения операции, отнимающей много времени. Моя проблема заключается в том, что во время выполнения операции фоновый работник не может сообщить о каком-либо прогрессе до его завершения. за одну итерацию индикатор выполнения всегда показывает 0%, а когда он завершается, индикатор выполнения немедленно закрывается. Поэтому у пользователя не создается впечатление, что задача выполнена. Я ищу способ сообщить пользователю, что задача выполнена. завершено до закрытия progessbar. Мой код, как показано ниже.
this.progressDialog = new progressDialog();
Dispatcher pdDispatcher = ((Window)this.progressDialog).Dispatcher;
this.worker = new BackgroundWorker();
this.worker.WorkerSupportsCancellation = true;
this.worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
this.worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
foreach (Element id in state.Elements)
{
if (this.worker.CancellationPending)
{
args.Cancel = true;
return;
}
UpdateProgressDelegate update = new UpdateProgressDelegate(this.UpdateProgressText);
pdDispatcher.BeginInvoke(update, Convert.ToInt32(((decimal)state.Elements.IndexOf(id) / (decimal)state.Elements.Count()) * 100), state.Elements.Count());
Element newElement = this.Item.Copy(id);
if (newElement .HasValue)
{
state.CreatedElements.Add(newElement.Value);
}
}
};
this.worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
if (!(args.Error == null))
{
throw args.Error;
}
this.UpdateDisplayItems();
this.progressDialog.Close();
this.progressDialog.Dispose();
};
this.worker.RunWorkerAsync();
this.progressDialog.Show();
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressDialog.Value = e.ProgressPercentage;
}
public void UpdateProgressText(int percentage, int recordCount)
{
this.progressDialog.Description = string.Format("{0}% of {1} Records", percentage.ToString(), recordCount);
this.progressDialog.Value = percentage;
}