изтриване на файлове с изображения, заключени от vshost.exe c#

Имам c# приложение, което показва изображения във формуляр. Опитвам се да презапиша тези изображения и да ги генерирам отново. Получавам изключение, докато се опитвам да изтрия съществуващо изображение (в този случай това е png). Опитах се да изхвърля изображението, използвано от picturebox, и след това да го настроя на null, но все още получавам изключение поради нарушение на споделянето. Въпреки това мога да отида в Explorer и да изтрия файла без проблем.

В опит да разбера кой процес е заключил това изображение, Process Monitor ми казва, че това е vhost.exe, който хоства моето приложение.

Как мога да заобиколя това? Има ли някакъв начин да накарам хоста да освободи заключването на файла, така че да мога да го изтрия/създам отново? В крайна сметка имам голям брой изображения, които се генерират като миниатюри, които се нуждаят от актуализиране всеки път, когато базата данни претърпи промени, които засягат графиките. Не бих искал да мисля, че трябва да извикам командна обвивка, за да направя това.

Благодаря за всякакви съвети.

Гари


person Gary    schedule 11.05.2012    source източник
comment
vshost.exe е вашата програма. Частта vshost е артефакт за отстраняване на грешки. Със сигурност пропускате обаждане за изхвърляне някъде.   -  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