2010-06-30 53 views
1

我在我的WPF项目下面的方法(.NET 4):WPF图像的可见性是不会改变

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

的图像是在DockPanel中,我希望它出现,而“DoWork的() “方法正在执行,但直到”MyMethod()“方法退出后才会更改状态。有人可以解释如何使这项工作正确吗?

谢谢你的帮助。

+0

你会想在不同的线程中运行它。 – spong 2010-06-30 19:21:39

回答

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()); 
} 
+0

谢谢,里德 - 帮了我很多! (1) – 2011-08-28 22:51:09