异步问题 - 不更新UI

时间:2013-09-02 12:06:10

标签: c#-4.0 windows-8

我在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);
        }


    }

还将以下方法返回类型作为任务。         private async Task CheckforOnlineUpdatesAsync(Category category,bool isReFresh) { }

提前致谢

1 个答案:

答案 0 :(得分: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。

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