Silverlight ChildWindow在回调时无法正常关闭

时间:2011-06-09 20:46:28

标签: c# silverlight childwindow

我有一个简单的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();
}

任何指针都会受到赞赏,我想我在这里缺少一些基本的东西。

2 个答案:

答案 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使用工具包BusyIndi​​cator完成这项任务。

答案 1 :(得分:0)

要在等待异步调用时显示窗口,我会使用silverlight toolkit中的“BusyIndi​​cator”。

无论如何,如果WaitingScreen是ChildWindow,它应该返回一个值(Accept或Cancel)来关闭。也许这就是问题。