我有一个简单的ChildWindow,它只包含两个元素,textblock和一个进度条来模拟等待屏幕。 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();
}
任何指针都会受到赞赏,我想我在这里缺少一些基本的东西。
答案 0 :(得分:1)
关闭方法被调用两次,这不是我的情况。
我认为可能是。考虑两次调用DoSomething
两次已为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完成这项任务。
答案 1 :(得分:0)
要在等待异步调用时显示窗口,我会使用silverlight toolkit中的“BusyIndicator”。
无论如何,如果WaitingScreen是ChildWindow,它应该返回一个值(Accept或Cancel)来关闭。也许这就是问题。