1

我有从 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();

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

4

1 回答 1

6

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

TaskScheduler.FromCurrentSynchronizationContext();

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

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

希望这可以帮助,

亨里克

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

于 2012-04-30T05:14:11.433 回答