удаление файлов изображений, заблокированных vshost.exe c#

У меня есть приложение С#, которое показывает изображения в форме. Я пытаюсь перезаписать эти изображения и восстановить их. Я получаю исключение, когда пытаюсь удалить существующее изображение (в данном случае это png). Я попытался удалить изображение, которое использует изображение, а затем установить для него значение null, но все равно получаю исключение из-за нарушения общего доступа. Тем не менее, я могу без проблем зайти в проводник и удалить файл.

Пытаясь выяснить, какой процесс заблокировал это изображение, Process Monitor сообщает мне, что это vhost.exe, на котором размещено мое приложение.

Как я могу обойти это? Есть ли способ заставить хост снять блокировку с файла, чтобы я мог удалить/воссоздать его? В конечном итоге у меня есть большое количество изображений, которые создаются в виде эскизов, которые необходимо обновлять каждый раз, когда в моей базе данных происходят изменения, влияющие на графику. Мне не хотелось бы думать, что для этого мне нужно вызвать командную оболочку.

Спасибо за любой совет.

Гэри


person Gary    schedule 11.05.2012    source источник
comment
vshost.exe — это ваша программа. Часть vshost — это артефакт отладки. Вы наверняка где-то пропустили вызов dispose.   -  person Hans Passant    schedule 11.05.2012
comment
Можете ли вы опубликовать код, который вы используете?   -  person Omar    schedule 11.05.2012


Ответы (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);
}
person daryal    schedule 11.05.2012
comment
Я так пробовал, разницы нет. Я также отключил использование vshost.exe, но тогда он просто блокируется самим приложением. - person Gary; 11.05.2012
comment
Однако это все равно будет давать ошибки при манипулировании изображениями, открытыми таким образом. Если они открываются из вспомогательного ресурса (такого как файл или поток), они всегда будут предполагать, что этот ресурс все еще существует. Единственный способ обойти это — глубокое клонирование данных изображения - person Nyerguds; 24.01.2018