If an exception occurs in the BackgroundWorker control's DoWork method it will get wrapped in to the RunWorkerCompletedEventArgs object in the RunWorkerCompleted method.
Checking the Error property of the RunWorkerCompletedEventArgs tells us if an exception occurred on the BackgroundWorker's thread. By re-throwing the exception in the RunWorkerCompleted method it will then be on the calling (GUI) thread where it can be then be dealt with accordingly:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
if (e.Error != null) throw e.Error;
The error check should always be the first statement in the RunWorkerCompleted method.