Мне нужно переместить/переименовать некоторые изображения, которые загружаются внутри изображений, изображения хранятся в папке в исполняемом пути приложения. Прежде чем я смогу переместить/переименовать какое-либо изображение, я должен убедиться, что он не используется, поэтому я попытался загрузить другое изображение из исполняемого пути приложения в этот графический ящик, а также попытался «обнулить» свойство изображения в виде изображения.Невозможно разблокировать изображение, используемое в ящике изображений
Если я хочу, чтобы двигаться дальше в моей программе изображение все еще заперт я подтверждено это, используя следующий код:
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch (IOException)
{
return true;
}
finally
{
if (stream != null)
stream.Close();
}
return false;
}
Я также попытался использовать код отсюда: What process locks a file?
Какие вернул мне следующее: System.Collections.Generic.List'1 [System.Diagnostics.Process]
Я должен сказать вам, что я также борюсь с AccessViolationException, используя те же изображения и методы. Я не совсем уверен, что это одна и та же проблема ... так, как я сохранил изображения неправильно или как я их использую? Дайте мне знать, если вам нужно больше кода или информации!
EDIT:
И связь с TAW и ответ от Anon Трус не работает для меня, и я действительно старался изо всех сил, чтобы заставить его работать, я пытался распоряжаться и обнулить PictureBox, изображение и т.д. .Я нашел решение, смешанный с вашим предложением, но это очень грязная ...
var image2 = Image.FromFile(infos[i].FullName);
MemoryStream ms = new MemoryStream();
if (ImageFormat.Jpeg.Equals(image2.RawFormat))
{
// JPEG
image2.Save(ms, ImageFormat.Jpeg);
}
else if (ImageFormat.Png.Equals(image2.RawFormat))
{
// PNG
image2.Save(ms, ImageFormat.Png);
}
else if (ImageFormat.Gif.Equals(image2.RawFormat))
{
// Bitmap
image2.Save(ms, ImageFormat.Bmp);
}
else if (ImageFormat.Icon.Equals(image2.RawFormat))
{
// Icon
image2.Save(ms, ImageFormat.Icon);
}
image2.Dispose();
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.IO.File.Delete(infos[i].FullName);
Image newImg = Image.FromStream(ms);
newImg.Save(neuer_name2);
newImg = null;
Я знаю, что с помощью GarbageCollection не правильный путь, но я понятия не имею, какие блоки образы .. .so Я все еще ищу реальное решение здесь.
код, который нагрузки и которые пытаются изменить/переместить их, будут еще интереснее, чем тот, который пытается разблокировать. Пожалуйста, покажите все .. Вы видели [это] (http://stackoverflow.com/questions/37736815/overwrite-image-picturebox-in-c-sharp/37741101?s=2|0.0000#37741101)? – TaW
Я видел ссылку, и сейчас я работаю над ней, если это не поможет, я отредактирую свой оригинальный вопрос. – user3868224
См. Изменение в моем ответе, я забыл, что есть старая проблема GDI +, с которой вы могли столкнуться –