If your operation produces a result, you can assign the result to the DoWorkEventArgs.Result property. This will be available to the RunWorkerCompleted event handler in the RunWorkerCompletedEventArgs.Result property.
If you set e.Cancel to True in the DoWork event handler then you're saying that the operation was cancelled, so then providing a result makes no sense. If you want to provide a result then you're saying that the operation completed, so you don't set e.Cancel.Your RunWorkerCompleted event handler should always check the Error and Cancelled properties before accessing the Result property. If an exception was raised or if the operation was canceled, accessing the Result property raises an exception.