Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何";等待“;另一扇窗户的关闭_C#_.net_Wpf_Async Await - Fatal编程技术网

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()是我一直在想的谢谢你,我会记住这对我将来一定会有帮助