这是我的设置,这段代码工作正常
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语句的筛选。
在没有后台线程的情况下,代码可以正常工作。
如有任何想法或建议,我们将不胜感激。
发布于 2009-06-04 14:26:39
可能是抛出了一个异常。在RunWorkerCompleted事件中,检查传入的RunWorkerCompletedEventArgs值的Error属性。
当异常发生时,BackgroundWorkers不会向主线程引发异常。相反,您必须在RunWorkerCompleted事件上检查它们。
发布于 2009-06-04 19:29:07
我不确定是什么问题,但这解决了问题。
最初,我只是将business.dll复制到bin文件夹中并引用它,但是该文件夹包含一个较旧的business.obj文件。当我同时复制business.dll和business.obj文件时,这个问题就消失了。
https://stackoverflow.com/questions/950907
复制相似问题