バックグラウンド ワーカーを使用してファイルの読み込みを処理し、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 です。これは簡単に修正できますが、代わりにスレッドを機能させたいと考えています。