tob*_*777 4 .net c# wpf async-await
我有很多代码看起来像这样:
MyWindow window = new MyWindow(someParam, callingWindow)
Run Code Online (Sandbox Code Playgroud)
MyWindow类包含类似的东西:
public MyWindow.Processing()
{
` // Do processing
...
callingWindow.RefreshListBox(); // Listbox for example
}
Run Code Online (Sandbox Code Playgroud)
有没有内置的方法来等待关闭窗口.我希望能够在callingWindow的类中编写类似的东西:
await mywindowInstanceCloseEvent;
RefreshListBoxWhenWindowIsClosed();
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法来"暂停"一个方法(无论是否异步),直到特定窗口关闭.
Ath*_*ari 13
你可以使用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;
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
await ShowPopup(new MyWindow());
Run Code Online (Sandbox Code Playgroud)
如果希望窗口是模态的,可以替换Show方法ShowDialog.
如果要从窗口获取结果,可以修改代码以便TaskCompletionSource<Result>正确使用.
| 归档时间: |
|
| 查看次数: |
3110 次 |
| 最近记录: |