对于长时间加载页面,应采用哪种策略



尝试解决以下问题:

提供将显示的进度指示器,直到导航目标完成加载。导航到的目标可能需要长达30秒的加载时间,因为有来自互联网上不同来源的图像。

问题在于使用NavigationService或Page的事件处理此类任务,因为总是在Page加载其内容之前引发,这是在loaded事件中完成的。加载过程是异步的,因为它没有阻塞UI,因此不能移动到构造函数,因为它不能标记为异步。

有没有一种有效的模式来解决这个问题?

这里的一个选项是让构造函数创建一个返回Task<T>的方法,然后将其存储在类成员中

然后,Loaded事件可以在创建的任务上使用await提取数据并异步显示。

这看起来像:

Task<YourData> initialDataLoadTask;
// In your constructor:
YourPage()
{
    this.InitializeComponent();
    // Use async method here to fetch data, but do NOT use await
    this.initialDataLoadTask = FetchDataAsync();
    this.Loaded += this.OnLoaded;
}
private async void OnLoaded(object sender, RoutedEventArgs e)
{
    // Use await to pull out the data asynchronously now...
    var data = await this.initialDataLoadTask;
    // Display data as needed...
}

这允许整个链是异步的,构造函数仍然初始化数据的获取(因此它会尽可能快地进入)。

相关内容

最新更新