2014-03-19 76 views
0

我有如下代码:无法接收来自服务器的响应?

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) 
     { 

     } 

    } 

这是发送sucessfull到服务器,但它不能reciced数据response.Please教我如何响应数据,我希望得到响应的SendData方法没有委托和wc__UploadStringCompleted是不叫

+0

如果您不需要为WP7的支持,我会用'HttpClient',而不是'WebClient'。与'async-await'模式一起使用时更友好。该软件包通过'NuGet'可用,需要一秒钟才能安装,一分钟即可适应。 http://www.nuget.org/packages/Microsoft.Net.Http/2.2.18 –

回答

0

如果你的意思是,你想要的sendData()方法中的反应,你可以在sendData()本身挂钩的处理程序..

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

    catch (Exception exc) 
    { 

    } 
} 
+0

在技术上,使用内联代理仍然将控制交给另一个函数。 –

+0

是的当然..我猜是他需要一些变量从sendData()访问完成的处理程序.. – bit

+0

这就是'UserState'的用途。无需为了共享数据而保持委托内联。 –

1
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(); 
} 
+0

+1 - 这是WP8的做事方式。 –

相关问题