2014-03-19 77 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的做事方式。 –

相關問題