avatar

professional geek ramblings
est. 2003
About

BackgroundWorker.isRunning

This is a private boolean member of the new BackgroundWorker class in .NET 2.0. If it were public, perhaps there would be less questions like this one on the gotdotnet messageboards. I ran into a similar problem recently and decided that instead of catching an exception when the BackgroundWorker is running, I would emulate the isRunning member myself. Since this is multithreaded by its nature, I decided to use a lock object to control access to a static boolean member in the class that uses the BackgroundWorker component.

static bool isRunningBgWorker = false;
static object lockObj = new object();

...

if (!isRunningBgWorker) {
	this.backgroundWorker1.RunWorkerAsync();
}

I check to see if it’s running before even setting it off to do the work.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
	lock (lockObj) {
		isRunningBgWorker = true;
	}

The first thing that happens when the DoWork eventhandler is called and

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
...

	lock (lockObj) {
		isRunningBgWorker = false;
	}
}

the last thing when the work is completed: controlled access to the isRunningBgWorker member. Hope this helps somebody else out there who is having trouble with the BackgroundWorker component.