C# 如何";等待“;另一扇窗户的关闭
我有很多这样的代码:C# 如何";等待“;另一扇窗户的关闭,c#,.net,wpf,async-await,C#,.net,Wpf,Async Await,我有很多这样的代码: MyWindow window = new MyWindow(someParam, callingWindow) public MyWindow.Processing() { ` // Do processing ... callingWindow.RefreshListBox(); // Listbox for example } 使用包含以下内容的MyWindow类: MyWindow window = new MyWindow(someParam,
MyWindow window = new MyWindow(someParam, callingWindow)
public MyWindow.Processing()
{
` // Do processing
...
callingWindow.RefreshListBox(); // Listbox for example
}
使用包含以下内容的MyWindow类:
MyWindow window = new MyWindow(someParam, callingWindow)
public MyWindow.Processing()
{
` // Do processing
...
callingWindow.RefreshListBox(); // Listbox for example
}
是否有一种内在的方式等待窗口关闭。我希望能够在callingWindow的课堂上写出类似的内容:
await mywindowInstanceCloseEvent;
RefreshListBoxWhenWindowIsClosed();
我想知道是否有一种简单的方法可以“暂停”一个方法(无论它是否异步),直到关闭一个特定的窗口。您可以使用
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;
}
如果希望窗口是模态的,则可以将ShowDialog
方法替换为ShowDialog
如果要从窗口中获取结果,可以修改代码以适当地使用
TaskCompletionSource
。这取决于您的需要。如果需要将窗口显示为模式对话框,请使用window.ShowDialog
。否则,您可以使用Window.Closed
事件
如果您想等待它,这里有一个来自@Athari的消息。使用
窗口。ShowDialog
来阻止调用方,或者使用窗口。Closed
事件。您的意思是要冻结父窗口还是在关闭子窗口之前无法访问父窗口?ShowDialog就是其中之一!多谢各位。把它作为回复贴出来,我会接受的。谢谢@Ngerog6谢谢你的评论,不,实际上我只是想阻止在新窗口关闭之前在调用窗口中执行更多指令。ShowDialog()是我一直在想的谢谢你,我会记住这对我将来一定会有帮助