I would not touch the backgroundworker too much and use a dispatchtimer.
See
http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx[
^]
The problem with the backgroundworker is that it is on a different thread, and you cannot change GUI elements on a different thread than the GUI thread, except if you use the reportsprogress functionality. Moreover the backgroundworker does not track time. So just create a dispatchtimer when the backgroundworker starts, and remove it when the backgroundworker is done.