C# で動作する非常に基本的な Windows フォーム アプリがあり、 Background Workerを試していました。ほとんどの場合、そのページの基本コードに従いました。
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
実行中にウィンドウが閉じられたときにバックグラウンドワーカーが作業を行っている場合 (たとえば、X を押す) を除いて、すべてがうまく機能します。上記のメソッドは null 参照例外をスローしています (progressBar で推測しますか?)。
私はこれをクロージングメソッドに入れました:
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if(bgWorker.WorkerSupportsCancellation == true)
bgWorker.CancelAsync();
}
しかし、これで問題は解決しませんでした。なぜこれが起こっているのか疑問に思っていprogressBar
ます。その行を削除すると、ビジー状態でウィンドウを閉じても例外がスローされないため、に分離されていることがわかっています。