Question: I want to start a job in a new thread or using backgroundworker to do it but havent done that before and asking you wich way I should do it. 

My program has a datagridview with a list of files, one file per row. I want the user to be able to select a row and then press "Start download" to start a background job of the download. I want to get events back of the progress of the download.

I have a class clsDownload that handles everything and raises events back but how do I implement the backgroundworking?

Should I use the System.ComponentModel.BackgroundWorker inside of the class or create some wrapper that handles this or use some other threading stuff?

Thanks.

**Edit:** I dont understand how to implement my download in the backgroundworker, any small example would be very nice. The example on msdn didnt get me far.

I have a download class that has a StartDownload-function. Should I use the backgroundworker IN the class or in the caller? "feeling stupid"

Answer: 
I'd strongly advise `BackgroundWorker` if you need to provide feedback to the user on the UI. The `ProgressChanged` and `RunWorkerCompleted` events are run on the UI thread, so there's no need to do marshalling, which can make your code more complex.
The backgroundworker looks like it should work... There is an example on MSDN.

<http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx>

Or you could do something like:

```
WaitCallBack workCallBack= new WaitCallBack(DownloadMethod);
if(!ThreadPool.QueueUserWorkItem(workCallBack, "ThreadPooled")
{
   // Unable to Pool
}

// Work has been added to pool and will execute when possible

```

Depends what parameters if any you need for the Thread.