C# 删除vshost.exe c锁定的图像文件#

C# 删除vshost.exe c锁定的图像文件#,c#,file,sharing,filelock,C#,File,Sharing,Filelock,我有一个c#应用程序,它以一种形式显示图像。我正在尝试覆盖这些图像并重新生成它们。当我试图删除一个现有的图像(在本例中是png)时,我遇到了一个异常。我尝试处理picturebox正在使用的图像,然后将其设置为null,但由于共享冲突,我仍然得到一个异常。不过,我可以去资源管理器删除文件没有任何问题 在试图找出哪个进程锁定了此映像时,进程监视器告诉我是vhost.exe托管了我的应用程序 我怎样才能避开这件事?有没有办法让主机释放文件的锁,以便删除/重新创建它?最终,我有大量图像生成为缩略图,需

我有一个c#应用程序,它以一种形式显示图像。我正在尝试覆盖这些图像并重新生成它们。当我试图删除一个现有的图像(在本例中是png)时,我遇到了一个异常。我尝试处理picturebox正在使用的图像,然后将其设置为null,但由于共享冲突,我仍然得到一个异常。不过,我可以去资源管理器删除文件没有任何问题

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

我怎样才能避开这件事?有没有办法让主机释放文件的锁,以便删除/重新创建它?最终,我有大量图像生成为缩略图,需要在数据库发生影响图形的更改时进行更新。我不愿意认为我需要调用命令shell来实现这一点

谢谢你的建议


Gary

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

FileStream fileStream = new FileStream("ImageName.jpg", FileMode.Open, FileAccess.Read);
yourPictureBox.Image = Image.FromStream(fileStream);
fileStream.Close();
或者不明确关闭;您可以使用语句使用

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

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

FileStream fileStream = new FileStream("ImageName.jpg", FileMode.Open, FileAccess.Read);
yourPictureBox.Image = Image.FromStream(fileStream);
fileStream.Close();
或者不明确关闭;您可以使用
语句使用

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

vshost.exe是您的程序。vshost部分是一个调试工件。您肯定在某处丢失了dispose调用。您可以发布您正在使用的代码吗?vshost.exe是您的程序。vshost部分是一个调试工件。你肯定错过了某个dispose调用。你能发布你正在使用的代码吗?我试过了,没什么区别。我还禁用了vshost.exe的使用,但它只是被应用程序本身锁定了。不过,在操作以这种方式打开的图像时,仍然会出现错误。如果它们是从备份资源(如文件或流)打开的,它们将始终假定该资源仍然存在。唯一的办法是我试过了,没什么区别。我还禁用了vshost.exe的使用,但它只是被应用程序本身锁定了。不过,在操作以这种方式打开的图像时,仍然会出现错误。如果它们是从备份资源(如文件或流)打开的,它们将始终假定该资源仍然存在。唯一的解决办法是