Question: I have a method that processes thousands of items and it takes a long time.

What is the "right" way to have the method that is doing the long operation report back its progress as it does this?

For example, if I wanted to have a progress bar in my UI show the progress of some long running method in another thread.

Answer: 
Use a [BackgroundWorker](http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx).

There are several SO questions on the BackgroundWorker, for example:

* [Background worker class and passing messages using progress events from a different class in c#](https://stackoverflow.com/questions/1675124/background-worker-class-and-passing-messages-using-progress-events-from-a-differe)
In this particular case I would be inclined to create a custom event and fire it from the long running process, and just subscribe whatever UI elements you want updated to the event in event handlers. (UI is always updated in the main UI thread anyway)