C#中的Async和Await关键字
本文关键字:Await 关键字 Async 中的 | 更新日期: 2023-09-27 18:27:31
我学到异步编程有助于生成多个线程,这样异步线程就不会影响UI,后续的代码行也不需要等到上一个线程完成。现在的想法是,我异步调用弹出按钮,在调用它的同时,我想隐藏底部的应用程序栏。但令人惊讶的是,在实现时,appbar并没有隐藏,直到弹出按钮被打开并关闭。不明白为什么。这是一段抽象的代码。您的输入将帮助我更好地理解异步进程。
private async void OnClick(object sender, TappedRoutedEventArgs e)
{
var flyout = new cmpWebA.Flyout();
await flyout.ShowAsync();
this.BottomAppBar.IsOpen = false;
}
调用异步操作包括两部分:启动和等待完成。
您的代码当前启动操作flyout.ShowAsync();
,然后等待其完成(await
),然后隐藏底部栏(this.BottomAppBar.IsOpen = false;
)。
如果您想在ShowAsync
运行时隐藏底部栏,请在启动前隐藏它,并在完成时显示它:
private async void OnClick(object sender, TappedRoutedEventArgs e)
{
this.BottomAppBar.IsOpen = false;
var flyout = new cmpWebA.Flyout();
await flyout.ShowAsync();
this.BottomAppBar.IsOpen = true;
}
您也可以先启动ShowAsync
,然后隐藏底部条,然后等待完成,然后显示底部条:
private async void OnClick(object sender, TappedRoutedEventArgs e)
{
var flyout = new cmpWebA.Flyout();
var task = flyout.ShowAsync();
this.BottomAppBar.IsOpen = false;
await task;
this.BottomAppBar.IsOpen = true;
}
如果你想要真正的并发性,让多个线程来完成一项工作,那么没有什么可以代替实际创建线程。或任务。