在加载事件时关闭模式窗口

本文关键字:模式 窗口 加载 事件 | 更新日期: 2023-09-27 18:37:12

环境 :

视图需要从 excel 和限制加载默认值。 模型从数据库加载。所以观点是两者之间的碰撞。绑定更新另一个和另一个,依此类推。由于数据库是 99% 稳定的,所以我在这里没有问题,但 excel 源可以在一天内发生很大变化,有时包含无效数据。因此,我决定让视图从 excel 接收数据并将其传播到模型,以便它们在此过程中验证自己而不会崩溃。这些模型还使用了 50 多个 WCF 服务和网络/防病毒软件,有时会杀死连接,因此错误也会被抛出那里。我再次完成了处理这个问题的所有工作,模型中的单个布尔值可以说明一切是否正常。

问题 :

视图必须是模态的,所以我用一个简单的MyWindow.ShowDialog();来称呼它。当它关闭时,我请求模型并将其传递给需要使用它的不同对象。

现在这很完美,但是当我在窗口本身(传递给它的 excel 数据)或 1 个或多个模型(通常在 1 到 5 之间变化)出现问题时。这不是很重要,但让我提一下,这些模型彼此完全不同,彼此无关,有些属性少于 100 个,其他超过 4,000 个。

无论如何,这些模型可能会触发一个事件,指出它们已损坏/无效/无响应。如果只有 1 个不能正常运行,我必须停止在此视图中继续。现在,将带有按钮的覆盖层说"关闭"是唯一可点击的东西,尽管对我来说非常简单,但:)不被接受为可行的解决方案。

因此,让所有内容加载,我甚至查看了我可以用来检查状态的内容,然后弹出一个带有一些文本解释的消息框,然后自动关闭窗口。我发现Loaded事件适合我的需求,事实上我在那里断点,模型完成得很好。我能够毫无问题地显示一条轻快的消息,但this.Close();不是......合作。

this.Close();将错误Hwnd of zero is not valid.抛到MyWindow.ShowDialog();上。我确实尝试了一下,它有效,但我的意思是这不是解决方案。试图在Show();ShowDialog();抛出和错误之前关闭,我理解,但是在没有用户交互的情况下在哪里可以调用This.Close();

见鬼,我在加载后尝试了一个计时器来完成工作,在记住计时器是一个线程并且外部线程无法调用关闭后,我自己面对手掌。

编辑:我要补充一点,我没有立即阅读模态结果

MyWindow.ShowDialog(); // <-- crash here but on F11 it goes in loaded then when loaded finsih it crash. seems like issue when show dialog return.
if (MyWindow.DialogResult == true)
{
    // .....
}

在加载事件时关闭模式窗口

我用代码的精确副本重新创建了另一个项目,只要不存在数据绑定,它就可以工作。 一旦存在数据绑定,.ShowDialog();就会在返回时失败。我只是将无镀铬窗口切换为标准窗口,然后一切正常。另一个他们否认是错误的同步错误。他们称之为"预期行为"。