Have a look at this thread.
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/52dcb460-90a3-45f2-ae23-bcb60514c542[
^]
The above works by saving the state information of the operation each time through its loop. When the user selects "Pause", the background worker is actually cancelled using
CancelAsync method. However, the worker thread saves state information every time it updates the UI thread. This stores the "worker process state" on the main thread. Whenever the background worker is started, it simply reads its information from the state variable and goes to work.
Hope this helps... :)
Jasmin