0

我在 Windows 8 开发中使用异步方法。但在完成完整方法执行之前,它不会更新 UI。

这是我的代码。

当用户按下屏幕上的刷新按钮时,下面的方法调用。

public async override void ExceuteRefresh()
    {
        IsBusy = true;             //This is bounded to my UI to show progress bar, but its not updating to UI
        foreach (var category in CategoryObservableColl)
                {
                    CheckforOnlineUpdatesAsync(category, true);
                }          
   }

private async void CheckforOnlineUpdatesAsync(Category category, bool isReFresh)
    {            
           var feed = await _dataService.GetOnlineRssFeedAsync(category.RssFeedLink.URL);
           var newsCategory = _dataService.GetCategoryFromFeed(feed, true, category.RssFeedLink);
            if (newsCategory != null)
           {
                 isRefreshCount +=1;
           }                                    
           if(isRefreshCount ==9)
       {
         IsBusy = false;
       }                                      

     }

IsBusy 已实现 InotifyPropertyChanged。

任何帮助将不胜感激。尝试了以下方法。

public override async void ExceuteRefresh()
    {
        await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => IsBusy = true);
        _reloadCategories = false;
        _refreshLinkCount = 0;

        try
        {
            foreach (var category in CategoryObservableColl)
            {
                _refreshLinkCount += 1;
                await CheckforOnlineUpdatesAsync(category, true);
            }
        }
        catch (Exception ex)
        {
            MainPage.ShowMessage("Something Went wrong!. " + ex.Message);
        }


    }

还将以下方法返回类型作为任务。私有异步任务 CheckforOnlineUpdatesAsync(Category category, bool isReFresh) { }

提前致谢

4

1 回答 1

0

尝试这个

  1. 更改async void CheckforOnlineUpdatesAsync(...)async Task CheckforOnlineUpdatesAsync(...)

  2. 将方法调用更改为await CheckforOnlineUpdatesAsync(category, true);

  3. 更改public async override void ExceuteRefresh()public async override Task ExceuteRefresh()

  4. 替换IsBusy = false;为下面给定的代码。您需要使用 UI 线程来更新 UI。

await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => IsBusy = false);

于 2013-09-02T12:45:14.240 回答