c# - 如何等待异步方法完成然后继续执行指令?
问题描述
我正在 xamarin.forms 上创建一个跨平台应用程序。我正在使用一个插件来显示一个弹出窗口。但是,似乎await
密钥不起作用,因为在任务完成之前继续执行。除此之外,如果显示弹出窗口的按钮连续多次快速单击,则弹出窗口将显示多次单击而不是显示一次并阻止所有其余部分。
我有一个附加到按钮的命令。每当单击按钮时,都会正确触发命令属性,但await
似乎没有效果。
public ICommand {
get => new Command(async () =>
{
if (ObjectivosDoMes.Count < 3)
await PopupNavigation.Instance.PushAsync(new NovoObjectivoDoMes(ObjectivosDoMes), true);
PodeAdicionarObjMes = ObjectivosDoMes.Count < 3 ? true : false;
});
}
我想在弹出窗口关闭后立即执行弹出窗口后的代码。这是我用来显示弹出窗口的库:https ://github.com/rotorgames/Rg.Plugins.Popup
解决方案
在您的代码中,您假设 PopupNavigation 返回的任务将在弹出窗口关闭时完成。相反,一旦弹出页面被推送到导航堆栈,这个任务就会完成。因此,等待此任务将无助于检测弹出窗口何时关闭。您可以挂钩到弹出页面的消失事件。这是一些独立的工作示例,不依赖于其他视图/视图模型。
// in constructor
ButtonTappedCommand = new Command(async () => await OnButtonTappedCommand()) ;
page = new Rg.Plugins.Popup.Pages.PopupPage();
}
private async Task OnButtonTappedCommand()
{
page.Content = new Button()
{
Text="Close",
// close the popup page on tap
Command = new Command(()=>PopupNavigation.Instance.PopAsync())
};
page.Disappearing += Popup_Disappearing;
await PopupNavigation.Instance.PushAsync(page);
}
private void Popup_Disappearing(object sender, EventArgs e)
{
page.Disappearing -= Popup_Disappearing;
Debug.WriteLine("Someone closed the popup");
}
推荐阅读
- azure - 如何在 azure 门户网站中获取所有 Web 应用程序的 URL/URL 列表
- c++ - 为 c/c++ 函数调用设置超时
- javascript - D3非圆弧
- unity3d - Oculus Go - 检测运动
- java - ANTLR-4.7.1:不推荐使用 ANTLRInputStream 类型
- android - android jni调用方法错误
- html - 如果单击 iframe 中的任何链接,为什么 iframe 的 src 属性不会更改?
- angular - 带有辅助按钮的 mat-nav-list
- ssl - SSL 实现 oracle apex
- php - 无法从 php 中的 curl 调用中获取数组元素的值