2014-09-01 70 views
4

我有很多的代碼看起來就像是:如何「等待」另一扇窗的關閉

MyWindow window = new MyWindow(someParam, callingWindow) 

用含mywindow的類類似的東西:

public MyWindow.Processing() 
{ 
` // Do processing 
    ... 
    callingWindow.RefreshListBox(); // Listbox for example 
} 

有一個內置等待關閉窗口。我希望能夠寫類似的東西在callingWindow的類:

await mywindowInstanceCloseEvent; 
RefreshListBoxWhenWindowIsClosed(); 

我不知道是否有一個簡單的方法來「暫停」的方法(無論是異步或不)到特定窗口被關閉。

+5

使用'Window.ShowDialog'來阻止調用者或使用'Window.Closed'事件。 – 2014-09-01 08:36:11

+0

你的意思是你想要凍結父窗口或使其無法訪問,直到你的子窗口關閉? – ngergo6 2014-09-01 08:36:41

+1

ShowDialog就是其中之一!萬分感謝。將其作爲答案發布,我會接受它。謝謝 ! – reddy 2014-09-01 08:37:54

回答

3

這取決於你的需求。如果您需要將窗口顯示爲模式對話框,請使用Window.ShowDialog。否則,您可以使用Window.Closed事件。

如果你想等待它,這裏是@Athari的good answer

11

您可以使用TaskCompletionSourceClosed事件。下面是一個方法,我用:

private Task ShowPopup<TPopup> (TPopup popup) 
    where TPopup : Window 
{ 
    var task = new TaskCompletionSource<object>(); 
    popup.Owner = Application.Current.MainWindow; 
    popup.Closed += (s, a) => task.SetResult(null); 
    popup.Show(); 
    popup.Focus(); 
    return task.Task; 
} 

您可以使用它像這樣:

await ShowPopup(new MyWindow()); 

您可以替換ShowShowDialog如果你想窗口是模式。

如果您想從窗口獲得結果,可以修改代碼以適當地使用TaskCompletionSource<Result>

+0

之後所做的,謝謝,我會記住它肯定會在未來幫助我 – reddy 2014-09-01 08:48:43