2

実行に数秒かかるリソースを大量に消費するメソッドがあります。そのため、タスクの実行中に待機アイコンを表示するように、タスク内で呼び出すことにしました。

私がやったことはimgLoading.Visibility = Visibility.Visible、タスクを作成する前、そしてタスクを作成する前と呼ばれています。タスクが完了したら、を呼び出しますimgLoading.Visibility = Visibility.Collapsed;

何らかの理由で、画像が折りたたまれることはなく、無期限に表示されたままになります。これは非常に奇妙な問題であり、非常に簡単に再現できます。これは私が持っているすべてのコードであり、私が間違ったことを本当に見ることができません:

imgLoading.Visibility = Visibility.Visible;

var validityTask = Task.Factory.StartNew(() => ExpensiveMethod(param1,param2));

                        validityTask.ContinueWith((previousTask) =>
                        {
                            bool isvalid = validityTask.Result;

                            if (isvalid)
                            {
                                //Do something to UI
                            }
                            else
                            {
                                //DO something to UI
                            }

                            imgLoading.Visibility = Visibility.Collapsed;

                        }, TaskScheduler.FromCurrentSynchronizationContext());

コードが示すようにimgLoading、タスクの実行中に画像を表示し、タスクの完了時にアイコンを非表示にしようとしています。この現在のコードでは、タスクが完了した後もアイコンは表示されたままになります。

私は何が間違っているのですか?

4

2 に答える 2

0

しばらくして、問題を解決することができました。これをここに投稿すると、将来誰かに役立つ可能性があります。私の問題は、明らかにブロックがまったく入っていないことでした。解決策は、タスクからすべての UI コードを削除することで、うまくいきました:)

于 2013-02-21T21:56:06.620 に答える
-1

Resultのプロパティを読み取る代わりに、validityTaskから読み取りますpreviousTask

Resultこれは、この方法でプロパティにアクセスし続けることを示すMSDNの例へのリンクです。

于 2013-02-21T20:55:33.763 に答える