我有一个屏幕,可从远程服务器检索信息并将该信息显示给用户。我希望在显示屏幕时更新此信息(不需要其他用户交互)。

public partial class MyPage : ContentPage
{
    protected override async void OnAppearing()
    {
        base.OnAppearing();
        try
        {
            MyLabel.Text = (await GoGetTheData ()).Stuff;
        }
        catch (Exception e)
        {
            MyLabel.Text = "Narg";
        }
    }
}


这可以接受吗?我已经看过所有有关“异步无效”的弊端的讨论,以及如何仅在事件处理程序中使用它,而这并不是一个事件处理程序。

在这种情况下,由于我(1)在获取所有异步文件之前调用了base.OnAppearing(),并且(2)捕获了我的异常,因此该框架是否可以保证正常工作?

最佳答案

这是可以接受的。添加了对这些框架重写的异步支持的原因。通常有“异步无效”的弊端,但是这种情况并不适用。

但是请注意,您应确保OnAppearing(Forms)OnCreate(Android)ViewDidLoad(iOS)方法尽快返回,以便用户获得愉悦的体验。

实际上,您将在许多Forms示例中看到此确切的语法:https://github.com/xamarin/xamarin-forms-samples/search?utf8=%E2%9C%93&q=async+void+OnAppearing

07-26 09:38