HttpClient ReadAsAsync - 完成后做一些事情

Riv*_*vka 1 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);
                                                            });
                    });
Run Code Online (Sandbox Code Playgroud)

当我得到响应/结果时,我正在尝试显示某种消息.但似乎没什么用 - 我的标签没有更新.

显然,我做错了什么 - 如何在收到回复后向用户显示消息?

TIA

编辑:

如下所述,我宣布:

TaskScheduler scheduler = TaskScheduler.FromCurrentSynchronizationContext();

并传入"调度程序"(尝试使用ContinueWiths),但仍然没有任何效果.实际上,现在我的lblMessage.Text上的断点未到达.

小智 6

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

TaskScheduler.FromCurrentSynchronizationContext();

正如MSDN [1]上的这篇文章中所描述的

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

希望这可以帮助,

亨里克

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