C# 异步等待执行windows phone 8
我不熟悉异步和等待式编程。如何解决以下问题: 我先调用下面的代码。这里的问题是第一行正在等待,需要填充C# 异步等待执行windows phone 8,c#,windows-phone-8,async-await,c#-5.0,dotnet-httpclient,C#,Windows Phone 8,Async Await,C# 5.0,Dotnet Httpclient,我不熟悉异步和等待式编程。如何解决以下问题: 我先调用下面的代码。这里的问题是第一行正在等待,需要填充categoriesvm.Categorieslist,它没有,但是调用了第二行。(我认为这是Wait的默认行为) 如何确保只有在第一行中填充了categoriesvm.Categorieslist时才调用第二行 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
categoriesvm.Categorieslist
,它没有,但是调用了第二行。(我认为这是Wait的默认行为)
如何确保只有在第一行中填充了categoriesvm.Categorieslist
时才调用第二行
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
categoriesvm.GetCategories();
BookCategories.DataContext = from vm in categoriesvm.Categorieslist select vm;
}
在上面的代码中,当我执行第一行时,它位于下面,其中Categorieslist
是我在上面访问的列表
public async void GetCategories()
{
Categorieslist = new ObservableCollection<Categories>(await PhoneClient.GetDefaultCategories());
}
您应该避免
async void
。我用一种简单的方式解释了这一方针
一旦将async void
方法更改为async任务
:
public async Task GetCategoriesAsync()
{
Categorieslist = new ObservableCollection<Categories>(await PhoneClient.GetDefaultCategories());
}
但是,我建议您在UI事件之外进行所有VM初始化—这将使您的代码更易于测试。请看我的博客文章以了解想法。您应该避免
异步void
。我用一种简单的方式解释了这一方针
一旦将async void
方法更改为async任务
:
public async Task GetCategoriesAsync()
{
Categorieslist = new ObservableCollection<Categories>(await PhoneClient.GetDefaultCategories());
}
但是,我建议您在UI事件之外进行所有VM初始化—这将使您的代码更易于测试。看看我的博客文章,了解一些想法
protected override async void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
await categoriesvm.GetCategoriesAsync();
BookCategories.DataContext = from vm in categoriesvm.Categorieslist select vm;
}