C# 无法从服务器接收响应?

C# 无法从服务器接收响应?,c#,windows-phone-8,C#,Windows Phone 8,我有一个代码如下: public static void sendData() { try { WebClient wc = new WebClient(); var URI = new Uri("abc.com"); string str = "data=1234"; wc.Headers["Content-Type"] = "application/x-w

我有一个代码如下:

 public static void sendData()
    {
        try
        {
            WebClient wc = new WebClient();
            var URI = new Uri("abc.com");
            string str = "data=1234";
            wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
            wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc__UploadStringCompleted);
            wc.UploadStringAsync(URI, "POST", str);
        }
        catch (Exception ex)
        {
            string temp = ex.Message;
        }
    }

   public static void wc__UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
    {

        try
        {
            string tt = e.Result;
        }

        catch (Exception exc)
        {

        }

    }

它已成功发送到服务器,但无法接收数据响应。请告诉我如何响应数据,我希望在sendData方法中获取响应而不是委派,并且wc_uUploadStringCompleted未调用

如果您的意思是,您希望响应位于
sendData()
方法中,您可以在
sendData()中连接处理程序
本身

wc.UploadStringCompleted += (s,e)=>
{
    try
    {
        string tt = e.Result;
    }

    catch (Exception exc)
    {

    }
}

如果您不需要对WP7的支持,我将使用
HttpClient
而不是
WebClient
。与
async wait
模式一起使用时更加友好。该软件包可通过
NuGet
获得,安装需要一秒钟,习惯需要一分钟。从技术上讲,使用内联委托仍在将控制权移交给另一个函数。是的,当然。。我猜他需要sendData()中的一些变量,可以在完成的处理程序中访问。
UserState
就是为了这个。为了共享数据,不需要保持委托内联。其他方式违反封装,IMHO:)当然。通过这种方式,您可以在另一个函数中定义一个函数。在一个函数中使用定义的变量,在另一个函数中使用,而不传入它们,这样做可以绕过变量范围(在经典意义上)。
public static async Task<string> sendData()
{
    TaskCompletionSource<string> complete = new TaskCompletionSource<string>();

    try
    {
        WebClient wc = new WebClient();
        var URI = new Uri("abc.com");
        string str = "data=1234";
        wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
        wc.UploadStringCompleted += (s, e) =>
        {
            try
            {
                string tt = e.Result;
                complete.SetResult(tttt);
            }
            catch (Exception exc)
            {
                complete.SetException(exc);
            }
        }
        wc.UploadStringAsync(URI, "POST", str);
    }
    catch (Exception ex)
    {
        string temp = ex.Message;
        complete.SetException(ex);
    }

    return await complete.Task;
}
public async void foo()
{
    string response = await sendData();
}