我正在使用后台工作来处理加载文件以阻止我的UI冻结,但看起来RunWorkerCompleted
在我的DoWork
事件完成之前完成(退出对话框时导致错误)。有什么我做错了吗?我最好在任务上做这件事吗?BackgroundWorker在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的设计还没有被加载,我可以很容易地解决这个问题,但更希望得到的,而不是穿线工作。
如果您想要答案,请提供有关核心代码的完整详细信息。这个'(cast)DllCall'太伪代码了。 –
@HenkHolterman - 我已经添加了这个方法,但是我看不到它有多相关? (也正在添加'使用dll') – Sayse
你看到了什么错误? – YK1