我目前正在编写一个C#应用程序,它在表单上使用PictureBox显示图像。
现在,我想要一致地更新此图像(例如每2秒)。但我无法做到这一点。
因为新图像也是相同的文件目录/名称,它将替换加载的原始图像。因此,当我想要替换它所显示的图像时,“文件正由另一个程序使用......等等。”
基本上,我想使用PictureBox加载图像,这个图像将在加载的图像被更改时一致地更新。
这可能吗?在C#中有没有其他方法可以做到这一点?
先谢谢, Perumal
答案 0 :(得分:1)
听起来好像没有关闭流。加载图片后尝试致电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();
答案 1 :(得分: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;
}
}
这应该做你想要的。
我希望这会有所帮助。
答案 2 :(得分:0)
我最好的解决方案是使用可执行文件,称为卷影复制。这实际上在Windows中用于备份,因为它允许您复制正在使用的文件。我实际上已经尝试过没有C#代码的工具,但它很容易在代码中使用。
这是一个链接:http://www.howtogeek.com/howto/windows-vista/backupcopy-files-that-are-in-use-or-locked-in-windows/
我的想法是使用其他名称制作该文件的副本并访问该文件并在下次加载后删除,我认为这是最适合您的方法。