1

这是我的设置,这段代码可以正常工作

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 语句上的过滤器,除了代码路径相同。

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

任何想法或建议将不胜感激。

4

2 回答 2

9

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

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

于 2009-06-04T14:26:39.320 回答
0

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

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

于 2009-06-04T19:29:07.460 回答