我在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) { }
提前致谢
答案 0 :(得分:0)
试试这个
将async void CheckforOnlineUpdatesAsync(...)
更改为async Task CheckforOnlineUpdatesAsync(...)
将方法调用更改为await CheckforOnlineUpdatesAsync(category, true);
将public async override void ExceuteRefresh()
更改为public async override Task ExceuteRefresh()
将IsBusy = false;
替换为以下代码。您需要使用UI线程来更新UI。
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => IsBusy = false);