C#BackGroundWorker Anomaly DoWork事件未触发

时间:2009-06-04 14:21:11

标签: c# multithreading backgroundworker

这是我的设置,此代码正常运行

private void butGo_Click(object sender, EventArgs e)
{
  threadCreateImages.RunWorkerAsync();
}


private void threadCreateImages_DoWork(object sender, DoWorkEventArgs e)
{
  PatientToHL7MSHManager tvPatientToHL7MSHManager = new PatientToHL7MSHManager();
  tvPatientToHL7MSHManager.LoadByMSHID(""); 
}


private void threadCreateImages_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
  MessageBox.Show("DONE"); 
}

如果我改变了 这条线 tvPatientToHL7MSHManager.LoadByMSHID( “”); 至 tvPatientToHL7MSHManager.LoadByPatientID( “”);

它跳过DoWork事件并直接进入RunWorkerCompleted事件。

除了代码路径相同之外,LoadByMSHID和LoadByPatientID之间的唯一区别是SQL语句上的过滤器。

代码在没有后台线程的情况下可以正常工作。

非常感谢任何想法或建议。

2 个答案:

答案 0 :(得分:9)

可能会抛出异常。在RunWorkerCompleted事件中,检查传入的RunWorkerCompletedEventArgs值的Error属性。

BackgroundWorkers在主线程发生时不会引发异常。相反,您必须在RunWorkerCompleted事件上检查它们。

答案 1 :(得分:0)

我不确定问题是什么,但这解决了这个问题。

最初我刚刚将business.dll复制到bin文件夹并引用它,但该文件夹包含一个较旧的business.obj文件。当我复制了business.dll和business.obj文件时,问题就消失了。