2017-02-26 48 views
1

我有一个Windows.Controls.Image,点击时需要更改它的源代码并在x毫秒内显示,然后导航到新页面。我在更改源代码后尝试使用Thread.Sleep(200),但无论我如何强制重新绘制,更改后的源代码都未显示,然后当睡眠结束时立即更改页面。有谁知道我该怎么做?干杯!点击图片显示新源后的C#短暂延迟

private void ButtonClicked(object sender, MouseButtonEventArgs e) 
    { 
     Image button = (Image)sender; 
     buttons[button.Name].Source = ImageResizer.ResizeImage(System.Drawing.Image.FromFile(@"D:\buttons\" + button.Name + ".png"), buttonSize); 
     NavigationService.Navigate(new UpgradeQuiz()); 
    } 
+0

你可以开始与节拍处理程序,做了导航呼叫DispatcherTimer(和停止定时器)。出于好奇,为什么在WPF应用程序中使用“System.Drawing.Image.FromFile”(来自WinForms),而不是直接从本地文件URI加载WPF BitmapImage? – Clemens

+0

我在很多年前只做了很短的c#编码,而且大部分都忘记了。我正在做的很多事情是在网络帮助下学习。我的ImageResizer.ResizeImage函数需要一个System.Drawing.Image,这就是我使用它的原因。代码在这里,如果你有兴趣:http://pastebin.com/s3VsHkhB当我学到更多的时候,我将回到最佳实践的重构。 – Falesh

+0

您通常不会在WPF应用程序中使用WinForms类。没有看过你的ResizeImage方法,我建议将其重写为仅使用'System.Windows.Media.Imaging'中的类。 – Clemens

回答

1

您可以异步等待:

await Task.Delay(2000); 

但你应该让你的处理器async

private async void ButtonClicked(object sender, MouseButtonEventArgs e) // async after private 
{ 
    Image button = (Image)sender; 
    buttons[button.Name].Source = ImageResizer.ResizeImage(System.Drawing.Image.FromFile(@"D:\buttons\" + button.Name + ".png"), buttonSize); 
    await Task.Delay(2000); 
    NavigationService.Navigate(new UpgradeQuiz()); 
}