I am currently working on a Windows.Forms application. It's basically a simple motion detection problem.

I have a button on a form, that when pressed launches a background worker that does the following :

1. Fetch an image from disk
2. Create a new bitmap, to be used as the buffer.
3. Perform Motion Detection
4. From the results of Motion Detection, update the buffer (using the buffer's drawing surface)
5. Fire the Progress Changed Event with an argument consisting of a clone of the buffer, basically `(sender as BackgroundWorker).ReportProgress((Bitmap)buffer.Clone())`

In the Progress Changed Event, I then draw the buffer to screen.

```
if (!PnlImage.IsDisposed)
            PnlImage.CreateGraphics().DrawImageUnscaled(buffer, 0, 0);

```

I can't help wondering if this is the best way to draw the updated image on the screen. Can anyone suggest any improvements I can make?
Thanks.

EDIT :
I have since updated the program to use the .NET Framework 4, and we're no longer using a BackgroundWorker. Instead, we are now using the System.Threading.Tasks namespaces, and using Invoke to update the background image from within the task.

Thanks to all replies.