【问题标题】:deleting image files locked by vshost.exe c#删除被 vshost.exe c# 锁定的图像文件
【发布时间】:2012-05-11 12:20:05
【问题描述】:

我有一个以表格形式显示图像的 c# 应用程序。我正在尝试覆盖这些图像并重新生成它们。尝试删除现有图像时出现异常(在本例中为 png)。我尝试处理图片框正在使用的图像,然后将其设置为 null,但由于共享冲突,我仍然遇到异常。不过,我可以毫无问题地进入资源管理器并删除文件。

在试图找出锁定此图像的进程时,进程监视器告诉我它是托管我的应用程序的 vhost.exe

我该如何解决这个问题?有什么方法可以让主机释放文件的锁定,以便我可以删除/重新创建它?最终,我有大量的图像生成为缩略图,只要我的数据库发生影响图形的更改,就需要更新这些图像。我不想认为我需要调用命令 shell 来执行此操作。

感谢您的建议。

加里

【问题讨论】:

  • vshost.exe 是你的程序。 vshost 部分是一个调试工件。你肯定错过了某个地方的 dispose 调用。
  • 你能贴出你正在使用的代码吗?

标签: c# file sharing filelock


【解决方案1】:

您可以尝试使用文件流加载图像并在阅读后关闭它们。

FileStream fileStream = new FileStream("ImageName.jpg", FileMode.Open, FileAccess.Read);
yourPictureBox.Image = Image.FromStream(fileStream);
fileStream.Close();

或者不是显式关闭;你可以使用using声明;

using(FileStream fileStream = new FileStream("ImageName.jpg", FileMode.Open, FileAccess.Read))
{
    yourPictureBox.Image = Image.FromStream(fileStream);
}

【讨论】:

  • 我试过了,没区别。我也禁用了 vshost.exe,但它只是被应用程序本身锁定。
  • 这仍然会在处理以这种方式打开的图像时出错。如果它们是从支持资源(如文件流)打开的,它们将总是假定该资源仍然存在。解决这个问题的唯一方法是a deep clone of the image data
猜你喜欢
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
相关资源
最近更新 更多