我正在使用后台工作人员来处理文件的加载以阻止我的 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,因为设计尚未加载,我可以轻松解决此问题,但宁愿让线程工作。