WPF图像可见性不会改变

时间:2010-06-30 19:13:51

标签: wpf

我的WPF项目(.net 4)中有以下方法:

private void MyMethod(){
    imgMyImage.Visibility = Visibility.Visible;
    DoWork();
    imgMyImage.Visibility = Visibility.Collapsed;
}

图像在DockPanel中,我希望它在执行“DoWork()”方法时出现,但是在“MyMethod()”方法退出之前它不会改变状态。有人可以解释如何使这项工作正确吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

您的“DoWork”方法阻止了UI线程。在完成之前,UI中的任何内容都不会更改(并且UI将保持无响应)。

更好的选择是将DoWork推送到后台线程。例如,使用.NET 4中的新任务框架,您可以将其写为:

private void MyMethod()
{
    imgMyImage.Visibility = Visibility.Visible;

    // Create a background task for your work
    var task = Task.Factory.StartNew( () => DoWork() );

    // When it completes, have it hide (on the UI thread), imgMyImage element
    task.ContinueWith( t => imgMyImage.Visibility = Visibility.Collapsed, 
            TaskScheduler.FromCurrentSynchronizationContext() );
}