关闭已加载事件的模态窗口

时间:2013-10-28 15:01:13

标签: c# wpf

环境:

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

问题:

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

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

无论如何,这些模型可能会触发一个事件,表明它们已损坏/无效/无响应。 如果只有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)
{
    // .....
}

1 个答案:

答案 0 :(得分:0)

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