2014-01-25 40 views
0

我有一个WPF应用程序,它包含一个MainWindow,它也有一个常规按钮。 绑定到按钮单击事件,我通过打开文件对话框加载一个序列化对象:调用OpenFileDialog.ShowDialog()后UI没有得到更新()

private void LoadNetwork_Click(object sender, RoutedEventArgs e) 
{ 
    var openDialog = new OpenFileDialog { Multiselect = false }; 
    var result = openDialog.ShowDialog(); 
    if (result) 
    { 
     string file = openDialog.FileName; 
     try 
     { 
      _network= new SimplifiedNetwork(file, 1); 
      MessageBox.Show("Loaded OK"); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Load error"); 
     } 
    } 
} 

后,此方法被执行的用户界面不会再更新。当我什么也没说,我的意思是甚至没有窗口上的按钮悬停效果(更不用说通过后面的代码更新标签,属性更改事件,开始调用等),它就像它被冻结(但仍然响应点击)。

我认为这是我做的事我的程序里面,而只是减少了方法调用

private void LoadNetwork_Click(object sender, RoutedEventArgs e) 
{ 
    var openDialog = new OpenFileDialog { Multiselect = false }; 
    var result = openDialog.ShowDialog(); 
} 

具有相同的效果。

澄清。 - 这发生在模态对话框关闭后。 - 一旦UI因任何原因失去焦点(如最小化 - 恢复,切换到另一个窗口),它似乎也表现出来。 - 这似乎只发生在我的Windows 8.1机器上(放入一个xp虚拟机,我有,可以)。

任何想法?

+0

你甚至可以看到OpenFileDialog框吗?屏幕如何冻结,但仍然响应点击?哪些“点击”工作? –

+0

是的,对象被加载等等。冻结是一个糟糕的选择,'静态'实际上会更好。你知道,当你将鼠标悬停在一个按钮上时,它会在我调用该方法后改变其颜色等,该按钮不会对我的鼠标悬停进行反应。但是我仍然可以点击它,它仍然会执行绑定到点击事件的操作。 – LuBa

+0

您是否说在文件对话框打开时无法与应用程序交互?是的,那么这是设计。 – MoonBoots89

回答

0

OpenFileDialog是一个模态对话框,它打算在对话框打开时背景窗口没有响应。

Here是更多的信息,也是您的问题的可能的解决方案。

+0

当然。但是,这仍然发生在*我关闭对话框之后。实际上,经过进一步检查,我的窗口在失去焦点后停止更新(例如,最小化 - >恢复) – LuBa

+0

它在关于关闭对话框的问题中没有提到任何内容 – thumbmunkeys

+0

您是对的。修正了现在,要说清楚。 – LuBa