首页 > 解决方案 > 为什么 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"));
    }

那么有人可以解释为什么会这样吗?

标签: xamarin.forms

解决方案


通常,您不应从构造函数中调用诸如 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");

    }

在此处输入图像描述


推荐阅读