Ich habe ein Problem in WPF, wo ein Fenster nicht freigeben, es ist File-Lock auf die Hintergrundbilddatei nach dem Schließen, bevor ein anderer Teil der Anwendung versucht, auf das Bild zu schreiben.
So als ein Beispiel; sagen, ich habe eine WPF-Anwendung, bestehend aus 3 Windows, 1 "Menü" Auswahlfenster und 2 andere. Beide Fenster erstellen eine ImageBrush
unter Verwendung einer BitmapImage
als die ImageSource
(die dieselbe Bild).
Fenster A hat eine Schaltfläche, die, wenn sie gedrückt wird, die verfügbaren Hintergrundbilder durchläuft, indem sie sie jeweils über die als Original verwendete Datei kopiert ImageSource
und die Erstellung eines neuen ImageBrush
und die Einstellung der Window.Background
auf den neuen Pinsel.
Fenster B verwendet einfach die ImageBrush
zum Zeichnen der Window.Background
.
Wenn Fenster A gestartet, die Hintergründe umgeschaltet, geschlossen und dann Fenster B gestartet wird, ist alles in Ordnung.
Wenn Fenster B gestartet und geschlossen wird, dann Fenster A gestartet wird und im Hintergrund geschaltet wird, stürzt es ab. Der Versuch, die Hintergründe zu wechseln, führt zu einem IOException
denn:
"Der Prozess kann nicht auf die Datei ' C:\Backgrounds\Background.png ', weil es von einem anderen Prozess verwendet wird."
Fenster B muss also noch irgendwie daran hängen!? Ich habe versucht, eine GC.Collect(); GC.WaitForPendingFinalizers();
um zu sehen, ob das Problem dadurch behoben wird, aber das ist nicht der Fall.