Я не уверен, правильно ли я понял, но я думаю, что вы пытаетесь перезапустить BackgroundWorker (так что если он занят, сначала остановите его, а затем запустите его снова) если это то, что вы хотите, попробуйте это:
объявите этого делегата где-то в вашем классе:
private delegate bool StateChecker();
и используйте этот код для перезапуска вашего BackgroundWorker :
StateChecker stillWorking = () => { return bw.IsBusy; };
if (bw.IsBusy)
{
bw.CancelAsync();
while ((bool)this.Dispatcher.Invoke(stillWorking, null)) Thread.Sleep(15);
}
bw.RunWorkerAsync();