我有一个简单的 ChildWindow,它只包含两个元素,文本 block 和一个用于模拟等待屏幕的进度条。该 ChildWindow 在调用异步 WCF 方法之前启动并在回调时关闭。
问题是 ChildWindow 第二次关闭时整个表面保持禁用状态。我搜索过类似的情况,一个 blog post谈到 Close 方法被调用两次,那不是我的情况。
下面是一些示例代码(svc 是一个 WCF 服务):
// global private class variable
private WaitingScreen wait = new WaitingScreen();
public void DoSomething()
{
svc.SaveCompleted += (s, arg) =>
{
wait.Close();
};
wait.Show();
svc.SaveAsync();
}
任何指针将不胜感激,我想我在这里遗漏了一些基本的东西。
最佳答案
Close method being called two times, that's not my case.
我想应该是吧。考虑调用 DoSomething
两次,有多少委托(delegate)已分配给 SaveCompleted
以及有多少已被删除?答:现在已经添加了 2 个,没有删除。因此,当它第二次完成时,Close
将被快速连续调用两次。
试试这段代码,它会在委托(delegate)被触发后删除它。
public void DoSomething()
{
var wait = new WaitingScreen();
EventHandler<AsyncCompletedEventArgs> saveCompleted = null;
saveCompleted = (s, arg) =>
{
wait.Close();
svc.SaveCompleted -= saveCompleted;
};
svc.SaveCompleted += saveCompleted;
wait.Show();
svc.SaveAsync();
}
说完我同意@zapico 的所有内容,使用工具包 BusyIndicator 完成这项任务。
关于c# - Silverlight ChildWindow 在回调时未正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299041/