Visual Studio C#:加载GridView缩略图且不锁定源文件的正确方法
解决GridView加载缩略图不锁定源文件的问题
问题原因
- 使用
Image.FromFile(tname)加载图片时,该方法会保持源文件的句柄打开,直到Image对象被释放,导致无法直接删除或重命名源文件。 - 你尝试的
BitmapImage是WPF框架下的图片类,而WinForms的DataGridView单元格仅支持System.Drawing.Image类型,因此出现类型转换错误。
正确解决方案
通过将源文件读取到内存流中,再从内存流创建Image对象,这样可以释放源文件的锁,同时保证图片正常显示:
using System.IO; using System.Drawing; // 读取源文件到内存流 using (FileStream fileStream = new FileStream(tname, FileMode.Open, FileAccess.Read)) using (MemoryStream memoryStream = new MemoryStream()) { fileStream.CopyTo(memoryStream); memoryStream.Position = 0; // 将流指针重置到起始位置 // 从内存流创建Image对象 Image tempImage = Image.FromStream(memoryStream); // 创建Image的副本,避免内存流关闭后图片失效 Bitmap thumbnail = new Bitmap(tempImage); // 将图片赋值给GridView单元格 fileGridView.Rows[dgIndex].Cells["thumbNail"].Value = thumbnail; }
关键说明
- 释放文件锁:
using块会自动关闭FileStream,释放对源文件的占用,此时可正常删除或重命名源文件。 - 创建图片副本:
Image.FromStream创建的对象依赖于流的存在,因此需要通过new Bitmap(tempImage)创建独立副本,确保内存流关闭后图片仍能正常显示。 - 列类型检查:确保
thumbNail列是DataGridViewImageColumn类型,否则无法正确渲染图片。
内容的提问来源于stack exchange,提问作者HighwayRob
相关产品推荐
相关产品推荐

