我有很多代码看起来像这样:
MyWindow window = new MyWindow(someParam, callingWindow)
MyWindow类包含类似的内容:
public MyWindow.Processing()
{
` // Do processing
...
callingWindow.RefreshListBox(); // Listbox for example
}
是否有内置方式等待关闭窗口。我希望能够在调用Windows的类中编写类似的内容:
await mywindowInstanceCloseEvent;
RefreshListBoxWhenWindowIsClosed();
我想知道是否有一种简单的方法可以暂停"一个方法(无论是否异步),直到特定窗口关闭。
答案 0 :(得分:12)
您可以使用TaskCompletionSource
和Closed
事件。这是我使用的方法:
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());
如果您希望窗口是模态的,可以将Show
方法替换为ShowDialog
。
如果您想从窗口获取结果,可以修改代码以适当地使用TaskCompletionSource<Result>
。
答案 1 :(得分:3)
这取决于你的需要。如果需要将窗口显示为模态对话框,请使用Window.ShowDialog
。否则,您可以使用Window.Closed
事件。
如果你想等待它,这是来自@Athari的good answer。