你的问题很模糊,但它让我想起了我在使用 BackgroundWorker 时遇到的随机崩溃。有时我会去几周,但从来没有抱怨过程序崩溃,而在其他日子里,我会有 10 次左右的抱怨。原来我遇到的问题是由于我修改了 UI。修改任何 UI 值(例如修改文本框的 Text 属性)都被视为对主线程的不安全线程调用。所有 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
重读你的问题,这部分对我来说很重要。
“它停止记录日志,但最后一个日志条目位于无关紧要的代码部分(即显示标签)。”
如果您在 DoWork 事件处理程序中修改 Visible 属性或修改标签的文本,这可能是您的问题。再次尝试将该代码移至 ReportProgress 事件处理程序或使用上面的 InovokeRequired 方法来解决此问题。