我在WPF中遇到了一个问题,即窗口在关闭后没有释放背景图片文件的文件锁,然后应用程序的另一部分尝试写入该图像时出现问题。
举个例子:假设我有一个由3个窗口组成的WPF应用程序,其中1个是“菜单”选择窗口,另外2个是其他窗口。这两个窗口都使用
窗口A有一个按钮,按下后会通过将每个可用的背景图像复制到用作原始
窗口B仅使用
如果启动窗口A,切换背景,关闭窗口,然后启动窗口B,一切正常。
如果先启动窗口B,关闭窗口,然后再启动窗口A并切换背景,则会崩溃。尝试切换背景会抛出
因此,窗口B必须仍然以某种方式持有它!?我尝试使用
举个例子:假设我有一个由3个窗口组成的WPF应用程序,其中1个是“菜单”选择窗口,另外2个是其他窗口。这两个窗口都使用
BitmapImage
作为ImageSource
创建ImageBrush
(使用相同的图像)。窗口A有一个按钮,按下后会通过将每个可用的背景图像复制到用作原始
ImageSource
的文件上,并创建一个新的ImageBrush
来循环显示它们,并设置Window.Background
为新刷子。窗口B仅使用
ImageBrush
绘制Window.Background
。如果启动窗口A,切换背景,关闭窗口,然后启动窗口B,一切正常。
如果先启动窗口B,关闭窗口,然后再启动窗口A并切换背景,则会崩溃。尝试切换背景会抛出
IOException
,因为:“进程无法访问文件'C:\Backgrounds\Background.png',因为另一个进程正在使用它。”因此,窗口B必须仍然以某种方式持有它!?我尝试使用
GC.Collect(); GC.WaitForPendingFinalizers();
来查看是否可以解决问题,但是没有效果。
BeginInit()
之前设置CacheOption = BitmapCacheOption.OnLoad
并不起作用!? - mkb