You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

关键说明

  1. 释放文件锁:using块会自动关闭FileStream,释放对源文件的占用,此时可正常删除或重命名源文件。
  2. 创建图片副本:Image.FromStream创建的对象依赖于流的存在,因此需要通过new Bitmap(tempImage)创建独立副本,确保内存流关闭后图片仍能正常显示。
  3. 列类型检查:确保thumbNail列是DataGridViewImageColumn类型,否则无法正确渲染图片。

内容的提问来源于stack exchange,提问作者HighwayRob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:36:21