1

こんにちは、これは私の最初の質問です。私は Azure でホストされている Web サービスを作成しています...そして、Windows Phone クライアント アプリケーションと Windows 8 Metro クライアント アプリケーションがあり、wp7 アプリケーションに接続すると、これらのメソッドを使用して取得しましたWindows phone のサービスからの何か:

        TimeTierBusiness.BusinessesClient client = new TimeTierBusiness.BusinessesClient();

        client.GetAllCompleted += new EventHandler<TimeTierBusiness.GetAllCompletedEventArgs>(client_GetAllCompleted);
        client.GetAllAsync();

結果を取得するには、以下に示すように client_GetAllCompleted に移動します。

    void client_GetAllCompleted(object sender, TimeTierBusiness.GetAllCompletedEventArgs e)
    {
        listNearbyBusinesses.ItemsSource = e.Result;
        myPopup.IsOpen = false;
    }

Windows 8 Metro では、結果を取得するために追加できる GetAllCompleted イベントはありません。Windows 8 でクライアントを呼び出すと、待機可能な GetAllAsync() メソッドだけが取得されます...

現在、地下鉄アプリでこのサービスを使用できないため、何か助けていただければ幸いです

ありがとう :)

解決策は、非同期メソッドを作成することでした。以下のコードを参照してください。

        //My WCF Service Client
        TimeTierBusiness.BusinessesClient bClient = new TimeTierBusiness.BusinessesClient();
        //The list I am going to get from the service
        public List<TimeTierBusiness.BusinessRatingViewModel> listBusinessViewModel;

サービスから非同期的にリストを埋めるこのメソッド

       private async void GetAllAsyc()
    {

        System.Collections.ObjectModel.ObservableCollection<TimeTierBusiness.BusinessRatingViewModel> x = await bClient.GetAllAsync();
        listBusinessViewModel = x.ToList();
        ItemListView.ItemsSource = listBusinessViewModel;
    }
4

1 に答える 1

0

Windows 8 (実際には、それに付属する .NET 4.5) には、これまでで最もマニアックな機能の 1 つがあります..これは await/async キーワードに基づいており、基本的に非同期コードを同期であるかのように記述できます。 . 仕事でもお気に入りのプロジェクトでも、大量の非同期コードを実行することになり、この機能を見た後、次に生まれる子供は犠牲として .NET の人に与えられると決めました (この機能はまさにそのためです)。私にはすでに3人の子供がいて、もう1人欲しくないからです)。

その要点は、通常のメソッドと同じように非同期サービス (この場合) を呼び出すためのコードを作成することですが、完了のためにイベントをフックする代わりに、非同期呼び出しの結果を単に「待機」し、その下の行、結果の処理を続行します-コンパイラはいくつかのダークマジックを実行し(yield returnを使用したことがある場合、これは非常によく似たタイプのダークマジックです)、メソッドを一連のメソッド+ステートマシンに変換します。正しい順序で呼び出されます。

詳細はこちら

于 2012-04-20T15:45:41.580 に答える