WPF图像可见性不会改变

Sak*_*o73 1 wpf

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

private void MyMethod(){
    imgMyImage.Visibility = Visibility.Visible;
    DoWork();
    imgMyImage.Visibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud)

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

感谢您的任何帮助.

Ree*_*sey 9

您的"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() );
}
Run Code Online (Sandbox Code Playgroud)