我正在使用一个后台工作器来处理文件加载,以防止我的ui被冻结,但似乎
我认为问题可能在于我的后台工作程序调用了一个dll但没有等待响应。我已经尝试添加检查,例如
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)
,但没有成功。
编辑2
错误是NRE,因为设计未加载,我可以轻松解决这个问题,但我宁愿让线程正常工作。
(cast) DllCall
太过于伪代码了。 - H HUsing to dll
加入进程中) - SayseDoWork
函数或外部调用中是否有任何异步操作?根据您展示的内容,似乎没有。否则,我无法理解“我的后台工作程序正在调用DLL并且不等待响应”的含义。 - Mike Zboray