c# - Silverlight ChildWindow 在回调时未正确关闭

标签 c# silverlight childwindow

我有一个简单的 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 的所有内容,使用工具包 BusyIndi​​cator 完成这项任务。

关于c# - Silverlight ChildWindow 在回调时未正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299041/

相关文章:

.net - 记录 WP7 的事件信息?

c# - 将单个节点从 XML 文件读入列表框(WP7、Silverlight、C#)

c# - WCF 服务在根据 PrincipalContext 验证凭据时抛出错误?

c# - 在数组中使用命名键 C# MVC razor

c# - 使用 WCF 数据服务将其发送到客户端后,部分类中的自定义属性不存在

c++ - 在父窗口中限制可拖动的子窗口?

c# - 我收到有关使用不同线程的错误消息?

c++ - 对话窗口内的子对话窗口

c# - 如何在c#中访问基类数据

c# - 异步/等待、TaskEx.WhenAll 和异常