最近、手動で作成した「ワーカースレッド」を使用する代わりに、BackgroundWorkerインスタンスを使用するようにWindowsフォームアプリケーションを書き直しました。チェックイン後、私はいくつかのテストが失敗し始めたことに気付きました。いくつかのデバッグの後、私はあなたに次の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 msまたは100分眠っても関係ありません。なぜ??私の生産コードはうまくいくようですが、回帰テストスイートを使用できないのは面倒です(私はFormsコンポーネントを作成するテストがあり、BackgroundWorkerを使ってテストを実行する必要があります) 次のステップは、 BackgroundWorkerのソースコードを調べてください。しかし、私がそれを行う前に、私はここでヘルプのチェックをしていたと思いました。
ありがとう、すぐに働きました! – Michael
これを答えとしてマークすることができます:) –