2012-04-30 8 views
1

に何かをする私は、ASP.NETのWeb APIからの応答を読み取るためのコードを持っている:私が得るときHttpClientをReadAsAsync - そのように完成

HttpClient client = new HttpClient(); 
client.GetAsync(path.ToAbsoluteUrl()).ContinueWith(
        (requestTask) => 
        { 
         HttpResponseMessage response = requestTask.Result; 
         response.EnsureSuccessStatusCode(); 
         response.Content.ReadAsAsync<DBResult>().ContinueWith(
                  (readTask) => 
                  { 
                   result = readTask.Result; 
                   lblMessage.Text = string.Format("{0} products were uploaded successfully. {1} failed.", result.Success, result.Failed); 
                  }); 
        }); 

私はある種のメッセージを表示しようとしていますレスポンス/結果バック。しかし、私のラベルは更新されません。

明らかに、私は何か間違っています - どのように応答を受け取った後にメッセージをユーザーに表示できますか?

TIA

編集

以下示唆したように、私は宣言:

TaskSchedulerスケジューラ= TaskScheduler.FromCurrentSynchronizationContext();

"スケジューラ"(両方のContinueWithsを試してみました)に渡されましたが、まだ何も動作していないようです。実際、lblMessage.Textのブレークポイントに達していません。

答えて

6

UIを更新するためにUIスレッドにアクセスする必要があるようです。 ContinueWithを実行すると、enyスレッドになります。これを回避する方法は、同期コンテキストを使用して渡すことです。

TaskScheduler.FromCurrentSynchronizationContext();

MSDNのこの記事で説明したように、[1]

そうしないと、あなたのコードは正常に見えます。このことができます

希望、

ヘンリク

[1] http://msdn.microsoft.com/en-us/library/dd997394.aspx

+0

あなたはこの質問を見てすることができ、してくださいhttp://stackoverflow.com/questions/10417942/how-can -i-use-readasasynct-with-this-data-schema – Cheeso

関連する問題