这是我的设置,此代码正常运行
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语句上的过滤器。
代码在没有后台线程的情况下可以正常工作。
非常感谢任何想法或建议。
答案 0 :(得分:9)
可能会抛出异常。在RunWorkerCompleted事件中,检查传入的RunWorkerCompletedEventArgs值的Error属性。
BackgroundWorkers在主线程发生时不会引发异常。相反,您必须在RunWorkerCompleted事件上检查它们。
答案 1 :(得分:0)
我不确定问题是什么,但这解决了这个问题。
最初我刚刚将business.dll复制到bin文件夹并引用它,但该文件夹包含一个较旧的business.obj文件。当我复制了business.dll和business.obj文件时,问题就消失了。