3

バックグラウンド ワーカーを使用してファイルの読み込みを処理し、UI がフリーズしないようにしていますRunWorkerCompletedが、イベントが完了する前に終了しているようですDoWork(ダイアログを終了するときにエラーが発生します)... 何か間違っていることはありますか? ? タスクよりもこれを行うほうがよいでしょうか?

public static <T> LoadDesign(string xmlPath)
{
    PleaseWait pw = new PleaseWait(xmlPath);
    pw.ShowDialog();
    return pw.design;
}


private PleaseWait(string xmlFile)
{
   InitializeComponent();
   bw = new BackgroundWorker();
   bw.WorkerSupportsCancellation = true;
   bw.DoWork += (s, e) =>
   {
      design = (Cast)DllCall containing XmlSerializer.Deserialize(...,xmlFile);
   };
   bw.RunWorkerCompleted += (s, e) => {
   //Exit please wait dialog
      this.Close(); 
   };
   if (!bw.IsBusy)
       bw.RunWorkerAsync();
}

この問題は、バックグラウンド ワーカーが dll を呼び出しており、応答を待っていないことが原因であると考えられます。私はwhile(design == null)役に立たないなどのチェックを追加しようとしました..

Edit2 デザインがロードされていないため、エラーは NRE です。これは簡単に修正できますが、代わりにスレッドを機能させたいと考えています。

4

2 に答える 2