Я недавно переписал свое приложение Windows Forms для использования экземпляров BackgroundWorker вместо использования созданных вручную «рабочих потоков». После регистрации я заметил, что некоторые тесты начали проваливаться. После некоторой отладки я могу продемонстрировать свои проблемы, показав вам следующие 2 теста:
[Test]
public void Test_A()
{
bool progressChanged = false;
var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += (s, e) => worker.ReportProgress(0, null);
worker.ProgressChanged += (s, e) => progressChanged = true;
worker.RunWorkerAsync();
Thread.Sleep(100);
progressChanged.ShouldBeTrue();
}
[Test]
public void Test_B()
{
//Creation of o form component causes (?) this test to fail, even do I dispose it
var view = new Form();
view.Dispose();
bool progressChanged = false;
var worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += (s, e) => worker.ReportProgress(0, null);
worker.ProgressChanged += (s, e) => progressChanged = true;
worker.RunWorkerAsync();
Thread.Sleep(100);
progressChanged.ShouldBeTrue();
}
Test_A успешно, а Test_B - неудачно. Это независимо от того, сплю я 100 мс или 100 минут. Зачем?? Кажется, что мой рабочий код работает, но раздражает отсутствие возможности использовать набор регрессионных тестов (у меня есть другой тест, создающий компоненты Forms, и эти тесты должны быть выполнены ДО моего теста с использованием BackgroundWorker)
Следующим шагом будет изучение исходного кода BackgroundWorker, но перед тем, как я это сделаю, я подумаю, что проверю здесь помощь.
С уважением, Майкл