C# 如何从另一个类的事件处理程序中获取结果?

C# 如何从另一个类的事件处理程序中获取结果?,c#,windows-phone,C#,Windows Phone,我必须从web服务获得结果。这就是我使用的: 编辑: 是否有任何方法可以将所有函数甚至处理程序放入一个类中,当我想从我的Web服务获取数据时,我会这样做: string json = MyWebService.GetData(); 首先,调用DownloadStringAsync建议传入用户名和密码,但实际情况并非如此 回答你的问题:现在更好的方法是使用C#5中提供的新的“异步/等待”功能。有关全面概述,请参阅 然后,您的示例变得微不足道(不再需要连接单独的事件处理程序) 然后,您仍然可以通过

我必须从web服务获得结果。这就是我使用的:

编辑: 是否有任何方法可以将所有函数甚至处理程序放入一个类中,当我想从我的Web服务获取数据时,我会这样做:

string json = MyWebService.GetData();

首先,调用DownloadStringAsync建议传入用户名和密码,但实际情况并非如此

回答你的问题:现在更好的方法是使用C#5中提供的新的“异步/等待”功能。有关全面概述,请参阅

然后,您的示例变得微不足道(不再需要连接单独的事件处理程序)

然后,您仍然可以通过一个单独的、可重用的(异步)方法来提取它:

私有异步任务GetDataAsync() { WebClient WebClient=新的WebClient(); //TODO设置凭据 字符串结果=等待webclient.DownloadStringTaskAsync(“http://your-url-here"); 返回结果; }
如果您想坚持使用基于事件的方法,您可以使用它自己的事件将功能包装在一个单独的类中,但这不会给您带来太多好处。

我从本文中了解到:

更多:

我在另一节课上写的:

 public static Task<int> InsertNewUser(string name, string phonenumber,string address) //can make it an extension method if you want.
    {
        TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();
        service.InsertNewUserCompleted += (object sender, WebService.InsertNewUserCompletedEventArgs e) => //change parameter list to fit the event's delegate
        {
            if (e.Error != null) tcs.SetResult(-1);
            else
                tcs.SetResult((int)e.Result);
        };
        service.InsertNewUserAsync(name, phonenumber,address);
        return tcs.Task;
    }

为什么不呢?您可以使用/利用c#的扩展方法。创建一个返回Json字符串或您期望的内容的方法,而不是void。我已经创建了一个返回int的方法,但不知何故,客户端上的异步方法就是void。我真的不知道为什么。这是我第一次使用这个。这不再是原来的问题…谢谢你非常有用的回答!实际上,这只是我在互联网上找到的一些代码块,有点像我的代码。我以为DownloadStringAsync是某人创建的函数。这是否仍然适用于我自己在webservice上的功能?我的所有int方法如何在客户端上变为void,而wait并不像上面所说的那样与void一起工作。我不完全确定你在这里问的是什么(你说的“我的int方法在客户端上变为void”是什么意思),但async/wait是该语言的一个特性,所以它的工作原理完全相同。我建议你熟悉一下这个功能。试试谷歌的“AsyncAwaitIntroduction”。我的意思是,我在WCF服务器上所有返回int的方法都变成了在客户端返回void的方法。例如:我在服务器上有一个int MyMethod(),但当我在客户端使用它时,它变成了void service.MyMethodAsync()。谢谢你的建议。
private async void Button_Click(object sender, RoutedEventArgs e)
{
    WebClient webclient = new WebClient();
    // TODO set up credentials
    string result = await webclient.DownloadStringTaskAsync("http://your-url-here");
    textBlock1.Text = str;
}
private async Task<string> GetDataAsync()
{
    WebClient webClient = new WebClient();
    // TODO set up credentials
    string result = await webclient.DownloadStringTaskAsync("http://your-url-here"); 
    return result;
}
 public static Task<int> InsertNewUser(string name, string phonenumber,string address) //can make it an extension method if you want.
    {
        TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();
        service.InsertNewUserCompleted += (object sender, WebService.InsertNewUserCompletedEventArgs e) => //change parameter list to fit the event's delegate
        {
            if (e.Error != null) tcs.SetResult(-1);
            else
                tcs.SetResult((int)e.Result);
        };
        service.InsertNewUserAsync(name, phonenumber,address);
        return tcs.Task;
    }
 int su = await WebServiceHelper.SignUp("blabla", "0123465","huehuehue");