winforms PictureBox图像无法更新/刷新

jhdbpxl9  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(326)

我有一个应用程序,它有一个列表框和一个图片框。我需要的是当ListBox.IndexChanged事件被触发时,PictureBox图像需要更新或刷新。
编辑:当我第一次从列表中选择某个项目时,图像会加载,但当我选择另一个项目时,图像不会更新。
我两次都试过了,但都没有成功:

PictureBox1.Refresh();
PictureBox1.Update();

在后台,当ListBox1的Index被更改时,我运行了一个脚本,以转到一个特定的网页,并根据ListBox中选择的项进行截图,并替换当前imageBox的图像。我想,也许我没有给它时间去获取图像,所以我也尝试了这个方法,但没有成功:

System.Threading.Thread.Sleep(3000);

应用程序如下所示:

以下是ListBox1.IndexChanged事件的内容:

Process myProcess;
myProcess = Process.Start("C:/users/bnickerson/desktop/script/RegScript.cmd");
System.Threading.Thread.Sleep(5000);
myProcess.Close();
string imgLoc = "C:/users/bnickerson/Desktop/script/result/last.png";
pictureBox1.Image = Image.FromFile(imgLoc);
pictureBox1.Update();
nfg76nw0

nfg76nw01#

正如Hans指出的,图像文件被锁定,直到返回的Image-object是Disposed

using (Process ExternalProcess = new Process())
{
   ExternalProcess.StartInfo.FileName = @"C:\users\bnickerson\desktop\script\RegScript.cmd";
   ExternalProcess.Start();
   ExternalProcess.WaitForExit();
}

string imgLoc = @"C:\users\bnickerson\Desktop\script\result\last.png";
if (pictureBox1.Image != null) { pictureBox1.Image.Dispose(); }
using (Image myImage = Image.FromFile(imgLoc))
{
   pictureBox1.Image = (Image)myImage.Clone();
   pictureBox1.Update();
}
mwecs4sa

mwecs4sa2#

我有一个类似的问题,图像不会刷新到新的图像,无论方法调用试图迫使它。
由于某种原因,仅在PictureBox未设置为“Dock:FILL”时发生
我的修复方法是处理映像并将其分配给NULL,然后应用新克隆的映像,如下所示。

Public Sub ApplyLastImage()
    If ScreenPicture.Image IsNot Nothing Then
        ScreenPicture.Image.Dispose()
        ScreenPicture.Image = Nothing
    End If
    ScreenPicture.Image = CType(LastImage.Clone, Drawing.Image)
    ScreenPicture.Update()
End Sub

相关问题