All,I already knew the basic usage the BackgroundWorker
to handle multiple thread case in the WinForm . And the code structure looks like below.
In the main thread of application. just start the BackgroundWork.
if (backgroundWorker1.IsBusy != true)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
Then it would fire the DoWork
event . So we can do something in there.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
......
// report progress.
worker.ReportProgress(iProgress);
....
}
Then we just need to handle the ProgressChanged
event to show the BackgroundWorker progress.
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//show progress.
resultLabel.Text = (e.ProgressPercentage.ToString() + "%");
}
After DoWork
finished or some exception happened. the event RunWorkerCompleted
would be fired.
Here comes my questions for this events handle. please help to review them. thanks.
I noticed there is property named 'Result' in the RunWorkerCompletedEventArgs e
, What does it use for? How can I use it ?
Is there any possibility to receive my custom exception message instead the e.error
? If there is, How to make it ?
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
resultLabel.Text = "Canceled!";
}
else if (e.Error != null)
{
resultLabel.Text = "Error: " + e.Error.Message;
}
else
{
resultLabel.Text = e.Result.ToString();
}
}
The Result
property in RunWorkerCompletedEventArgs
is the value you have assigned to the Result property of DoWorkEventHandler
in DoWork()
.
You can assign anything you like to this, so you could return an integer, a string, an object/composite type, etc.
If an exception is thrown in DoWork()
then you can access the exception in the Error
property of RunWorkerCompletedEventArgs
. In this situation, accessing the Result property will cause an TargetInvocationException
to be thrown.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With