Недавно я переписал приложение Windows Forms для использования экземпляров BackgroundWorker вместо использования созданных вручную рабочих потоков. После проверки я заметил, что некоторые тесты начали терпеть неудачу. После некоторых отладки я могу продемонстрировать режим мои проблемы, показывая вам следующие 2 теста:System.ComponentModel.BackgroundWorker никогда не вызывает ProgressChanged
[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, но прежде чем я это сделаю, я подумал, что я проверю на помощь здесь.
С уважением Майкл
Большое вам спасибо, сработал сразу! – Michael 2010-12-02 08:37:25