0

环境:

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

问题 :

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

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

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

因此,让所有内容都加载,我查看了什至可以用来检查状态的内容,然后弹出一个带有一些文字说明的消息框,然后自动关闭窗口。我发现该Loaded事件适合我的需要,事实上我在那里断点并且模型已经完成。我能够毫无问题地显示一条小消息,但this.Close();不是......合作。

在.上this.Close();抛出错误。我确实尝试过它并且它有效,但我的意思是它不是一个解决方案。试图在or抛出和错误之前关闭,我理解但是在没有用户交互的情况下可以调用 a吗?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)
{
    // .....
}
4

1 回答 1

0

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

于 2013-10-29T11:53:32.230 回答