You can add a Timer interval value in how often you want the background worker to execute, and by the timer of a past event you could start your desktop.
You will want to verify that the background worker is not busy before trying to start it again. If such a situation arises, you can immediately start working with the background worker when it is completed. (if you want it to start at least once every 5 seconds)
If you want it to wait 5 seconds after completion, you need to stop the timer before you start working with the background worker, and then in the background the workers finished the event, you need to reset the timer and start it again.
EDIT
after one of your comments below, it seems like you have a lot of background workers, in which case using one of the other approaches that inserts a delay into the background worker populating the event before starting the background worker is probably the best solution.
You can insert a delay using Thread.Sleep() , as suggested, or you could create a timer in the function and assign a delegate to the timer-passed event that restarted the worker background. Something along these (unchecked) lines:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Timer timer = new Timer(); timer.Interval = 5000; timer.Enabled = true; timer.Elapsed+=delegate (object sender, ElapsedEventArgs args) { backgroundWorker1.RunWorkerAsync(); }; timer.Start (); }
source share