我在我的应用程序中使用 BackgroundWorker。当 Backgroundworker 仍然很忙时,我可以显示进度条的变化。但是,当我使用 AutoResetEvent 等到 Backgroundworker 完成时,我没有看到进度条发生变化。有没有另一种方法,我可以等待 BackgroundWorker 完成并显示进度条更改?我对 C# 框架和编程很陌生。
private AutoResetEvent _resetEvent = new AutoResetEvent(false);
private void InitializeBackgroundWorker()
{
parserBackgroundWorker.DoWork +=
new DoWorkEventHandler(parserBackgroundWorker_DoWork);
parserBackgroundWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(
parserBackgroundWorker_RunWorkerCompleted);
parserBackgroundWorker.ProgressChanged +=
new ProgressChangedEventHandler(
parserBackgroundWorker_ProgressChanged);
parserBackgroundWorker.WorkerReportsProgress = true;
parserBackgroundWorker.WorkerSupportsCancellation = true;
}
private void parserBackgroundWorker_DoWork(object sender,
DoWorkEventArgs e)
{
// Get the BackgroundWorker that raised this event.
BackgroundWorker worker = sender as BackgroundWorker;
parser.Parse((SegmentFile)e.Argument);
_resetEvent.Set();
}
// This event handler deals with the results of the
// background operation.
private void parserBackgroundWorker_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
// First, handle the case where an exception was thrown.
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
// Next, handle the case where the user canceled
// the operation.
// Note that due to a race condition in
// the DoWork event handler, the Cancelled
// flag may not have been set, even though
// CancelAsync was called.
//resultLabel.Text = "Canceled";
}
else
{
// Finally, handle the case where the operation
// succeeded.
//resultLabel.Text = e.Result.ToString();
}
}
// This event handler updates the progress bar.
private void parserBackgroundWorker_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
ProgressBar1.Value = e.ProgressPercentage;
}
parserBackgroundWorker.RunWorkerAsync(selectedSegFile);
// when I comment this code I do see the progress bar change as the thread is doing the work.
_resetEvent.WaitOne();