我在 WPF 中遇到问题,在应用程序的另一部分尝试写入图像之前,窗口在关闭后没有释放背景图像文件上的文件锁定。
举个例子;假设我有一个由 3 个窗口、1 个“菜单”选择窗口和 2 个其他窗口组成的 WPF 应用程序。两个窗口都ImageBrush
使用 aBitmapImage
作为ImageSource
(相同的图像)创建一个。
窗口 A 有一个按钮,当按下该按钮时,通过将它们分别复制到用作原始文件的文件上ImageSource
并创建一个新的ImageBrush
并将其设置Window.Background
为新画笔来循环显示可用的背景图像。
窗口 B 只是使用ImageBrush
来绘制Window.Background
.
如果窗口 A 启动,背景切换,关闭,然后窗口 B 启动,一切都很好。
如果 Window B 启动,然后关闭,则 Window A 启动并且背景切换它崩溃。尝试切换背景会引发IOException
因为:
“该进程无法访问文件'C:\Backgrounds\Background.png',因为它正被另一个进程使用。”
所以窗口 B 一定还在以某种方式抓住它!?我试过做一个GC.Collect(); GC.WaitForPendingFinalizers();
看看这是否能解决问题,但它没有。