我希望在PictureBox中显示图像,并从文件中加载图像。不过,该文件会定期被覆盖,因此我无法保持文件锁定。我首先这样做:pictureBox.Image = Image.FromFile( fileName );
但是,这会使文件保持锁定状态。然后,我尝试通读流:
using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
pictureBox.Image = Image.FromStream(fs);
}
这不会锁定文件,但是会导致以后引发异常。 MSDN指示在图像的生命周期内,流必须保持打开状态。 (该例外包括“无法读取关闭的文件”或类似消息。)
如何从文件加载图像,然后没有对该文件的进一步引用?
最佳答案
很抱歉回答我自己的问题,但是我认为这对保留我自己太有用了。
技巧是将数据从文件流复制到内存流,然后再将其加载到映像中。然后可以安全地关闭文件流。
using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
fs.CopyTo(ms);
ms.Seek(0, System.IO.SeekOrigin.Begin);
pictureBox.Image = Image.FromStream(ms);
}