如何更改图像源,在 GUI 中显示并在之后运行一些代码? [复制]

Posted

技术标签:

【中文标题】如何更改图像源,在 GUI 中显示并在之后运行一些代码? [复制]【英文标题】:How do I change image source, show it in the GUI and run some code afterwards? [duplicate] 【发布时间】:2019-10-01 16:41:03 【问题描述】:

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

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

我怎样才能实现我的目标?

这是我尝试过的:

                    //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();

只有在一切都完成后,我的形象才会改变。 Image example

【问题讨论】:

Thread.Sleep 阻塞了 UI 线程。声明您的方法 async 并将 Thread.Sleep(...) 替换为 await Task.Delay(...) 【参考方案1】:

Thread.sleep 阻塞了 ui 线程,该线程会改变任何 ui

那是你的问题。

使您的方法异步。

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

n 是你那里的数字。

【讨论】:

以上是关于如何更改图像源,在 GUI 中显示并在之后运行一些代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从远程源(url)获取图像并在ImageView中显示?

C# - Emgu CV Retireve 并在 GUI(图片框或图像框)上显示计算的特征面和平均面

如何在 javafx imageView 中获取显示图像的宽度/高度?

如何结束图形 GUI 并执行控制台功能(QT)?

如何更改图像对比度(窗口中心和宽度)并在 QLabel 中显示(Python3.5,Qt5.1)

如何在 C++ 的 GUI 上显示 Iplmage 格式而不是在另一个窗口中显示?