У меня проблема в WPF, когда окно не освобождает свою блокировку файла для файла фонового изображения после закрытия до того, как другая часть приложения попытается выполнить запись в изображение.
Так в качестве примера; скажем, у меня есть приложение WPF, состоящее из 3 окон, 1 окна выбора «меню» и 2 других. Оба окна создают ImageBrush
, используя BitmapImage
в качестве ImageSource
(* то же изображение).
В окне A есть кнопка, которая при нажатии циклически перебирает доступные фоновые изображения, копируя их каждое поверх файла, используемого в качестве исходного ImageSource
, создавая новый ImageBrush
и устанавливая Window.Background
для новой кисти.
Окно B просто использует ImageBrush
, чтобы нарисовать Window.Background
.
Если окно A запускается, фоны переключаются, закрываются, а затем запускается окно B, все в порядке.
Если окно B запущено, закрыто, то окно A запускается и фоны переключаются, он вылетает. Попытка переключения фона выдает IOException
, потому что:
"Процесс не может получить доступ к файлу 'C: \ Backgrounds \ Background.png', поскольку он используется другим процессом."
Значит, Окно B должно еще как-то держаться за него !? Я попытался сделать GC.Collect(); GC.WaitForPendingFinalizers();
, чтобы посмотреть, излечит ли это проблему, но это не так.