我的WPF项目(.net 4)中有以下方法:
private void MyMethod(){
imgMyImage.Visibility = Visibility.Visible;
DoWork();
imgMyImage.Visibility = Visibility.Collapsed;
}
图像在DockPanel中,我希望它在执行“DoWork()”方法时出现,但是在“MyMethod()”方法退出之前它不会改变状态。有人可以解释如何使这项工作正确吗?
感谢您的帮助。
答案 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() );
}