Wcf Web服务已完成事件未在Metro Windows 8应用程序开发中显示

Wcf Web服务已完成事件未在Metro Windows 8应用程序开发中显示,wcf,windows-phone-7,asynchronous,wcf-data-services,windows-runtime,Wcf,Windows Phone 7,Asynchronous,Wcf Data Services,Windows Runtime,您好这是我在这里的第一个问题,我创建了一个托管在Azure上的Web服务。。。我有一个Windows phone客户端应用程序和一个Windows 8 metro客户端应用程序,现在当我连接wp7应用程序时,我使用以下方法从Windows phone上的服务中获取一些信息: TimeTierBusiness.BusinessesClient client = new TimeTierBusiness.BusinessesClient(); client.GetA

您好这是我在这里的第一个问题,我创建了一个托管在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();
现在在windows 8 metro上,没有可以添加以获得结果的GetAllCompleted事件,当我在windows 8上调用客户端时,我得到的只是GetAllAsync方法,这是可以等待的

任何帮助都将不胜感激,因为我现在无法在我的metro应用程序上使用此服务

谢谢:

好的,所以解决方案是,要创建一个异步方法,请参见下面的代码:

        //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;
    }

事实上,Windows8附带的.NET4.5是有史以来最极客化的功能之一。。它基于wait/async关键字,本质上允许您编写异步代码,就像它是同步的一样。无论是在工作中还是在宠物项目中,我最终都完成了大量的异步代码,在看到这个功能后,我决定把我即将出生的下一个孩子交给.NET的人作为牺牲,因为这个功能非常好,而且我已经有了3个孩子,我真的不想再要一个了

它的jist是,在这种情况下,您编写调用异步服务的代码,就像编写常规方法一样,但是您不需要挂接事件以完成,只需等待异步调用的结果,然后在下面的一行中,继续处理结果-如果您曾经使用过yield return,编译器会执行一些暗魔法,这是一种非常类似的黑魔法,它将您的方法转换为一系列方法+一个状态机,并将以正确的顺序调用


嘿,谢谢,我算出来了:非常高兴,我会把我解决问题的方法贴出来。。。通过您的链接提供帮助:
       private async void GetAllAsyc()
    {

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