あなたの質問はかなり漠然としていますが、BackgroundWorker を使用して経験していたランダムなクラッシュを思い出させます。私は時々何週間も行き、プログラムがクラッシュしたという苦情がここに来ることはありませんでした。他の日には、10件ほどの苦情がありました。私が経験していた問題は、UI を変更したことが原因であることが判明しました。テキスト ボックスの Text プロパティの変更などの UI 値の変更は、メイン スレッドに対する安全でないスレッド呼び出しと見なされます。すべての UI の変更は、DoWork メソッドではなく、メイン スレッドで行う必要があります。UI を変更する必要がある場合は、バックグラウンド ワーカーの ReportProgress メソッドを使用するか、以下を参照して InvokeRequired プロパティをチェックするコードを変更します。UI から値を読み取ることは問題ではありません。値を設定/変更する場合のみです。
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
http://msdn.microsoft.com/en-us/library/ms171728.aspxを参照してください。
あなたの質問を読み直してください。この部分は私に突き出ています。
「ログの記録を停止しますが、最後のログ エントリはコードの重要でない部分にあります (つまり、ラベルを表示します)。」
Visible プロパティを変更したり、DoWork イベント ハンドラでラベルのテキストを変更したりする場合、これが問題になる可能性があります。このコードを ReportProgress イベント ハンドラに移動するか、上記の InovokeRequired メソッドを使用して問題を回避してください。