 <p>I am using <code>BackgroundWorker</code> a lot and can tell that <code>RunWorkerCompleted</code> event is <strong>definitely</strong> ran in UI thread. Also, you can pass the <code>DoWork</code> result to according eventArgs field and then, in <code>RunWorkerCompleted</code> take it from eventArgs to perform some UI-dependent operations with it, as mentioned <a href="http://stackoverflow.com/questions/939635/how-to-make-backgroundworker-return-an-object">here</a></p>