UI无法更新

时间:2013-02-21 15:55:58

标签: c# .net wpf multithreading visual-studio-2010

我有一个资源密集的方法,需要几秒钟才能执行。因此,我决定在任务中调用它,以便在执行任务时显示等待图标。

在创建任务,然后创建任务之前,我所做的就是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图像,并在任务完成时隐藏图标。使用此当前代码,即使任务完成,图标仍然可见。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

过了一段时间,我成功地解决了这个问题。在此发布此信息可能有助于将来的某个人。我的问题是这个街区甚至根本没有进入。解决方案是从任务中删除所有UI代码,它起作用:)

答案 1 :(得分:-1)

而不是阅读Result的{​​{1}}属性,请从validityTask阅读。

Here's指向MSDN上示例的链接,显示继续以此方式访问previousTask属性。