3

サンプルのWindowsPhone8アプリケーションを作成しています。フレームワークAsyncfor.NET Framework 4、Silverlight 4および5、およびWindowsPhoneもインストールしました。

しかし、await onメソッドは待機せず、mainpage.xamlがロードされ、まだ入力されていないプロパティにアクセスしようとします。

これが私のコードです。

public static ObservableCollection<Model.CatalogCategory> Products { get; set; } 
private async void Application_Launching(object sender, LaunchingEventArgs e)
    {
        ApplicationViewModel vm = new ApplicationViewModel();
        Products = await vm.LoadLocalDataAsync();

    }

このメソッドの後に、mainpage.xamlがロードされ、「Products」にアクセスしようとして、null参照例外がスローされます。

私が取らなければならない別のアプローチはありますか?

4

1 に答える 1

5

あなたはAsyncの意味を理解しておらず、「await」を正しく理解していませんでした。'await'は、そのメソッドブロック内の残りのコードのみを待機します。await行の後の残りのコードは、非同期タスクが完了した後にのみ呼び出されるコールバックに変換されます。そして、これはメソッド全体をブロックするわけではありません。メソッドは完了したものとして扱われ、コントロールは呼び出し元に戻ります。

そこで「await」を削除するか、MainPage_LoadedイベントまたはOnNavigatedToイベントでデータをロードしようとします。あなたに合ったものは何でも。

于 2012-12-20T09:16:34.157 に答える