【发布时间】:2013-05-24 09:09:35
【问题描述】:
我正在使用后台工作程序来处理文件的加载以阻止我的 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) 之类的检查无济于事..
编辑2 错误是 NRE,因为设计尚未加载,我可以轻松解决此问题,但宁愿让线程工作。
【问题讨论】:
-
如果您想要答案,请提供有关核心代码的完整详细信息。这个
(cast) DllCall伪代码太多了。 -
@HenkHolterman - 我已经添加了方法,但我看不出它有多相关? (也在添加
Using to dll) -
你看到了什么错误?
-
我对你如何称呼它更感兴趣。这是 DoWork 内部唯一相关的东西。
-
DoWork或异步外部调用中是否有任何内容?你所展示的一切似乎都不是。否则我看不出“我的后台工作人员正在调用 dll 而不等待响应”有什么意义。
标签: c# winforms backgroundworker