Ваш метод "DoWork" блокирует поток пользовательского интерфейса.Пока он не завершится, ничто в пользовательском интерфейсе не изменится (и пользовательский интерфейс останется без ответа).
Лучший вариант - поместить 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() );
}