HttpClient ReadAsAsync - 完成后做一些事情

时间:2012-04-30 00:07:34

标签: asp.net-web-api dotnet-httpclient

我有代码来读取ASP.NET Web API的响应,如下所示:

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 scheduler = TaskScheduler.FromCurrentSynchronizationContext();

并传入“scheduler”(尝试使用ContinueWiths),但仍然没有任何效果。实际上,现在我的lblMessage.Text上的断点没有到达。

1 个答案:

答案 0 :(得分:6)

看起来您必须访问UI线程才能更新UI。刚刚运行ContinueWith时,你最终可以使用eny线程。解决这个问题的方法是使用

传递同步上下文

TaskScheduler.FromCurrentSynchronizationContext();

如MSDN上的这篇文章[1]

所述

否则你的代码看起来很好。

希望这有帮助,

的Henrik

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