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);
                                                            });
                    });

応答/結果が返されたときに、何らかのメッセージを表示しようとしています。しかし、何も機能していないようです - 私のラベルは更新されません。

明らかに、私は何か間違ったことをしています - 応答が受信された後にユーザーにメッセージを表示するにはどうすればよいですか?

ティア

編集

以下に示すように、私は次のように宣言しました。

TaskScheduler スケジューラ = 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 に答える