我的WPF项目(.net 4)中有以下方法:
private void MyMethod(){
imgMyImage.Visibility = Visibility.Visible;
DoWork();
imgMyImage.Visibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud)
图像位于DockPanel中,我希望它在执行"DoWork()"方法时出现,但是在"MyMethod()"方法退出之前它不会改变状态.有人可以解释如何使这项工作正确吗?
感谢您的任何帮助.
您的"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)
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |