Background Worker Component
I've often created a Winforms application that required a lot of system resources to process, and wanted to allow the forms of the application to continue functioning, while this process was running. The most common example of this, is a simple progress bar to indicate how far along the process is. In previous versions of Visual Studio, I've always created thread to run this process and provided various events from whatever objects was being run. Now, with Visual Studio 2005 and the .NET Framework 2.0, Microsoft has provided a simple component to solve this common problem: the Background Worker component.
Simple drag & drop the component from the Toolbox onto your Winforms form

and in your code file, you will have access to three events provided by this component

Each of these events provides various information on what is happening with the background worker. From the MSDN Library:
To start up a background process, all you need to do is call the BackgroundWorker.RunWorkerAsync() method. This fires off the DoWork event inside of the context of a new thread, allowing your code to execute in the background. Inside of the DoWork event, you can grab a reference to the BackgroundWorker that made the call, by CType-ing the Sender parameter. From there, you can call the various other methods of the BackgroundWorker object, to provide progress indication, notification of completion, etc. Microsoft has provided some nice sample code in the MSDN article, How to: Run an Operation in the Background.