解决位图加载期间的 C# 文件锁定问题
当 Bitmap 对象在初始化后锁定图像文件时(例如 pbAvatar.Image = new Bitmap(filePath)
),通常会出现错误消息“该进程无法访问该文件,因为该文件正在被另一个进程使用”。这可以防止后续尝试访问或修改该文件。
解决方案在于释放这个锁。 一种高效的方法涉及直接从流加载图像,绕过位图构造函数的文件锁定机制:
<code class="language-csharp">public static Image LoadImageFromStream(string path) { byte[] imageBytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image img = Image.FromStream(ms); return img; } }</code>
该函数将图像文件读取到字节数组中,然后使用 MemoryStream 加载 Image 对象,避免文件锁定。 然后可以将此加载的图像分配给您的 PictureBox(例如 pbAvatar.Image = LoadImageFromStream(filePath);
)。
性能注意事项
如果 Bitmap 对象是绝对必要的,您可以有效地转换加载的图像:
<code class="language-csharp">return (Bitmap)Image.FromStream(ms);</code>
基准测试表明,直接从字节数组加载(每个图像大约 0.26 毫秒)比从现有位图创建位图(每个图像大约 0.50 毫秒)要快得多。 这种性能提升源于避免不必要的图像复制。
以上是如何在 C# 中解锁位图初始化锁定的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!