如何更改图像源,在GUI中显示它,然后运行一些代码?

时间:2019-05-14 15:35:23

标签: c# wpf multithreading image user-interface

我在WPF中有一个图像控件(基本上是整个窗口)。 当用户输入错误时,我希望图像更改,然后甚至摇动屏幕,请等待一秒钟(使用Thread.Sleep()),然后将图像更改回原始图像。 / p>

问题是:即使我在摇动屏幕之前更改了功能中的图像,但在执行所有功能后仍会更改它。

我如何归档目标?

这是我尝试过的:

                    //Change Diary Background
                    BitmapImage bitmap = new BitmapImage();
                    bitmap.BeginInit();
                    bitmap.UriSource = new Uri(System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName) + @"\lib\ViewLogin\ViewLoginIncorrect.png");
                    bitmap.EndInit();
                    imgDiary.Source = bitmap;

                    Thread.Sleep(1000);

                    //Shake Screen
                    this.Left = this.Left - 20;
                    Thread.Sleep(50);
                    this.Left = this.Left + 20;

                    txtMasterKey.Focus();

只有完成所有操作后,我的图像才会更改。 2

1 个答案:

答案 0 :(得分:-1)

Thread.sleep阻止ui线程,该线程将更改任何ui

那是你的问题。

使您的方法异步。

将thread.sleep(n)替换为await task.delay(n)。

n是您那里的数字。