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( ""); to 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 に答える