Silverlight ChildWindow在回调时未正确关闭
本文关键字:ChildWindow 回调 Silverlight | 更新日期: 2023-09-27 17:58:44
我有一个简单的ChildWindow,它只包含两个元素,textblock和一个进度条来模拟等待屏幕。该ChildWindow在调用异步WCF方法之前启动,并在回调时关闭。
问题是第二次关闭ChildWindow时,整个曲面将保持禁用状态。我搜索过类似的情况,一篇博客文章谈到了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方法被调用了两次,但我的情况并非如此。
我想可能是的。考虑一下调用DoSomething
两次,有多少delgate被分配给SaveCompleted
,有多少被删除了?答:现在已经添加了2个,没有删除任何内容。因此,当第二次完成时,Close
将被快速连续地调用两次。
请尝试以下代码,该代码将在激发一次委托后删除该委托。
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来完成这项任务。
要在等待异步调用时显示窗口,我将使用silverlight工具箱中的"BusyIndicator"。
无论如何,如果WaitingScreen是一个ChildWindow,它应该返回一个值(Accept或Cancel)来关闭。也许这就是问题所在。