2016-12-16 9 views
0

WebClientを使用してPOSTリクエストを送信しようとしていますが、UIがフリーズするのを防ぐために「UploadStringAsync」を使用しています。私は、アップロードが完了した後に、変数を返すようにしたいが、私はエラーを取得しています:uploadstringの変数を返します。

try 
{ 
    List<string> results = new List<string>(); 

    //Contact the API 
    using (WebClient getResults = new WebClient()) 
    { 

    ... 

     //Send the POST and get the result! 

     getResults.UploadStringCompleted += (sender, e) => 
     { 
      dynamic finalResult = JObject.Parse(e.Result);//finalResults.selectedProfile.name 
      results.Add(finalResult.selectedProfile.name); 
      return (results.toArray()); //Error is here 
     }; 

     getResults.UploadStringAsync(new Uri(URL), "POST", postInfo); 
    } 

    //This is what was there before: return (results.ToArray()); 
} 
catch (Exception ex) 
{ 
    ... 
} 

私は、受信エラーがある:

Since 'System.Net.UploadStringCompletedEventHandler' returns void, a return keyword must not be followed by an object expression

+0

配列をパラメータとして受け取り、ハンドラの最後で呼び出す関数を書くのはなぜですか? – Brutus

答えて

0

あなたには、いくつかの非同期構造を使用したい場合は、私は願っていますまず、以下のようにasyn関数を記述する必要があります。

static async Task<string> GetData() 
    { 
     using (WebClient webClient = new WebClient()) 
     { 
      return await webClient.UploadStringTaskAsync(new Uri("http://www.facebook.com/"), "POST", string.Empty); 
     } 
    } 

結果を待って解析することができます。

Task<string> getDataTask = GetData(); 
    if (!string.IsNullOrEmpty(getDataTask.Result)) 
    { 
     List<string> results = new List<string>(); 
     dynamic finalResult = JObject.Parse(getDataTask.Result); 
     results.Add(finalResult.selectedProfile.name); 
    } 

しかし、私が考えることは、我々はUIの凍結を扱うとき、WPFアプリケーションで、たとえば、我々はをマルチスレッド、ないasycを使用する必要があるということです。

関連する問題