xamarin.forms - 为什么 DisplayAlert 在构造函数中不起作用?
问题描述
我的 Xamarin.Forms 应用程序中有一些与async
在页面构造函数中调用方法相关的问题,所以当我测试某些东西试图找出我刚刚意识到DisplayAlert
方法在页面构造函数中甚至不起作用的原因时,所以我想知道为什么会这样?
这是我的代码:
public MainPage ()
{
InitializeComponent ();
DisplayAlert("An alert", "Why I don't show up?", "Ok");
}
而且我还尝试调用async
具有DisplayAlert
方法但也不起作用的方法,这是代码:
public MainPage ()
{
InitializeComponent ();
Async_Function_Has_DisplayAlert();
}
async void Async_Function_Has_DisplayAlert()
{
// I tried both and neither of them worked
await DisplayAlert("An alert", "Why I don't show up?", "Ok");
await Task.Run(()=> DisplayAlert("An alert", "Why I don't show up?", "Ok"));
}
那么有人可以解释为什么会这样吗?
解决方案
通常,您不应从构造函数中调用诸如 DisplayAlert() 之类的可等待方法。您可以做的是有一个返回 void 的方法(仍然不是最佳实践)并从您的构造函数中调用该方法。
尝试后调整我的建议。我使用 Device.Timer 来延迟警报。我认为某些组件在尝试调用之前尚未完成加载(在本例中为 DisplayAlert)。
public MainPage()
{
InitializeComponent();
Device.StartTimer(TimeSpan.FromSeconds(4), () =>
{
ShowMessage();
return false; // True = Repeat again, False = Stop the timer
});
}
public async void ShowMessage()
{
await DisplayAlert("Alert", "I show here", "OK");
}
推荐阅读
- amazon-web-services - 如何在 Gitlab CI/CD 中启动 Docker 容器
- react-native - 如何从 React Native 中的 Webview 内部打开浏览器中的外部链接?
- python - python igraph边作为节点图
- jquery - 使用 Select2 多复选框 JS 插件显示隐藏表格数据
- azure - 通过重复名称添加值
- python - 使用逻辑条件打印多个命名列
- tensorflow - 如何在 Google Colab 中降级 Cuda 和 cuDNN 版本?
- azure - 如何在 Kubernetes 上获取或设置非匿名 Azure 函数的密钥
- javascript - 在javascript es6中链接静态和非静态方法
- python - 由 Gluon-TS 示例生成的预测约为 0