我有代码来读取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上的断点没有到达。
答案 0 :(得分:6)
看起来您必须访问UI线程才能更新UI。刚刚运行ContinueWith时,你最终可以使用eny线程。解决这个问题的方法是使用
传递同步上下文TaskScheduler.FromCurrentSynchronizationContext();
如MSDN上的这篇文章[1]
所述否则你的代码看起来很好。
希望这有帮助,
的Henrik