UI无法更新

本文关键字:更新 UI | 更新日期: 2023-09-27 18:00:37

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

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

我做错了什么?

UI无法更新

一段时间后,我设法解决了这个问题。把这个贴在这里,以防将来对某人有所帮助。我的问题是,这个街区显然根本没有进入。解决方案是从任务中删除所有UI代码,它起到了作用:)

不是读取validityTaskResult属性,而是从previousTask中读取。

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