2014-01-25 41 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