WPF Fehler: 2147024864 Der Prozess kann nicht auf die Datei zugreifen, da sie bereits von einem anderen Prozess verwendet wird.
Der Fehler entsteht beim Verschieben einer Datei mit WPF. Ein Bild kann nicht verschoben werden, da es als Image angezeigt wird.
Unter WPF wurde ein Bild zur Anzeige geöffnet und dargestellt in einem Image Control
Fehlermeldung:
HResult=-2147024864
Message=Der Prozess kann nicht auf die Datei zugreifen, da sie bereits von einem anderen Prozess verwendet wird.
System.IO.IOException was unhandled
HResult=-2147024864
Message=Der Prozess kann nicht auf die Datei zugreifen, da sie bereits von einem anderen Prozess verwendet wird.
Source=mscorlib
StackTrace:
bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
bei System.IO.__Error.WinIOError()
bei System.IO.FileInfo.MoveTo(String destFileName)
|
Ursache:
Beim Laden eines Fotos in ein WPF Image zur Anzeige wurde dieses direkt mit der originalen Source geladen.
Dabei verbleibt das angezeigte Image im gesperrten Zustand, da es ja 1:1 angezeigt wird.
Lösung:
Thumbnail und Cache beim Laden
Beim Laden des Image Controls zur Laufzeitmit einer Bitmapsource stellt man die Source auf Cache und Thumbnail Modus ein.
Dadurch wird quasi nur ein Abbild geladen und die Quelle bleibt anschliessend verschlossen.
Anschliessend kann man Kopier- und Verschiebe-Funktionen mit dem Original Bild ausführen ohne eine Fehlermeldung zu erzeugen.
//----< load+add Image >----
Image newImage = new Image();
//-< source >-
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri(Image_with_Path, UriKind.Absolute);
//< thumbnail >
src.DecodePixelWidth = 200;
src.CacheOption = BitmapCacheOption.OnLoad;
//</ thumbnail >
src.EndInit();
newImage.Source = src;
//-</ source >-
newImage.Stretch = Stretch.Uniform;
newImage.Height = 100;
//< add >
panel_Images.Children.Add(newImage);
//</ add >
//----</ load+add Image >----
|
Anzeige unter Visual Studio Debug-Mode