0

我目前正在编写一个 C# 应用程序,该应用程序在表单上使用 PictureBox 显示图像。

现在,我想始终如一地更新这个图像(例如每 2 秒)。但我无法做到这一点。

因为新图像也具有相同的文件目录/名称,它将替换加载的原始图像。所以当我想替换它显示的图像时,“文件正在被另一个程序使用......等等)。

基本上,我想使用 PictureBox 加载图像,并且随着加载的图像在其目录中发生更改,该图像将不断更新。

这可能吗?在 C# 中有没有其他方法可以做到这一点?

提前致谢,佩马尔

4

3 回答 3

2

听起来好像流没有关闭。stream.close();加载图像后尝试调用。如果您要像这样加载图像,Image i = new Image(File.Open("blub.png"));那么您将不得不像这样重写它;

FileStream fs = File.Open("blub.png");
Image img = new Image(fs);
fs.Close();
fs.Dispose();
于 2012-05-23T13:25:24.407 回答
0

只需使用计时器(timeImageChange在下面的示例中调用)并将文件重命名为两个不同的文件名。然后你可以有类似的东西

bool imageALoaded = true;
timerImageChange.Interval = 2000;
timerImageChange.Enabled = true;

private void timerImageChange_Tick(object sender, EventArgs e)
{
    if (imageALoaded)
    {
        this.pictureBox1.Image = imageB;
        imageALoaded = false;
    }
    else
    {
        this.pictureBox1.Image = imageA;
        imageALoaded = true;
    }
}

这应该做你想要的。

我希望这有帮助。

于 2012-05-23T13:31:40.150 回答
0

我对您的最佳解决方案是使用可执行文件,它称为卷影复制。这实际上在 Windows 中用于备份,因为它允许您复制正在使用的文件。我实际上已经在没有 C# 代码的情况下尝试过这个工具,但它很容易在代码中使用。

这是一个链接: http: //www.howtogeek.com/howto/windows-vista/backupcopy-files-that-are-in-use-or-locked-in-windows/

我的想法是使用另一个名称复制文件并访问该文件并在下次加载后删除,我认为这是最适合您的方法。

于 2012-05-23T13:36:56.310 回答