BackgroundWorker not working with TeamCity NUnit runner
- by Catalin DICU
I'm using NUnit to test View Models in a WPF 3.5 application and I'm using the BackgroundWorker class to execute asynchronous commands.The unit test are running fine with the NUnit runner or ReSharper runner but fail on TeamCity 5.1 server.
How is it implemented :
I'm using a ViewModel property named IsBusy and set it to false on BackgroundWorker.RunWorkerCompleted event. In my test I'm using this method to wait for the BackgroundWorker to finish :
protected void WaitForBackgroundOperation(ViewModel viewModel)
{
int count = 0;
while (viewModel.IsBusy)
{
RunBackgroundWorker();
if (count++ >= 100)
{
throw new Exception("Background operation too long");
}
Thread.Sleep(100);
}
}
private static void RunBackgroundWorker()
{
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
System.Windows.Forms.Application.DoEvents();
}
Well, sometimes it works and sometimes it hangs the build. I suppose it's the Application.DoEvents() but I don't know why...