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

这是MSDN 上一个示例的链接,显示了Result以这种方式继续访问该属性。

于 2013-02-21T20:55:33.763 回答