当前位置: 首页 > 编程语言 > C#

Wpf图像控件阻止共享此文件

时间:2023-04-10 21:10:59 C#

Wpf图像控件阻止此文件我有一个带有按钮的简单窗口,当我单击该按钮时,会打开第二个窗口。第二个窗口有一个显示.png文件的图像控件。因此,如果我使用FileObject属性进行绑定,就可以了,我可以从文件资源管理器中删除该文件。但是,如果我使用FileName属性进行绑定,我将无法从文件资源管理器中删除该文件,我会收到操作系统异常。即使我明确调用GC,我也不能这样做,即使我关闭了第二个窗口。FileName属性有什么问题?有任何想法吗?win7,net4.0window1publicpartialclassWindow:Window{publicWindow(){InitializeComponent();数据上下文=这个;}privatevoidClick(Objectsender,RoutedEventArgse){varwindow=newWindow3();window.ShowDialog();}}Window2publicpartialclassWindow2:Window{publicWindow2(){InitializeComponent();数据上下文=这个;文件名="D:/pdf/myfile.png";关闭+=Window2_Closing;}publicStringFileName{得到;放;}publicObjectFileObject{get{if(String.IsNullOrEmpty(FileName))返回null;如果(!File.Exists(FileName))返回null;varms=newMemoryStream();varbi=newBitmapImage();使用(varfs=newFileStream(FileName,FileMode.Open,FileAccess.Read)){fs.CopyTo(ms);bi.BeginInit();bi.StreamSource=ms;bi.EndInit();;}}voidWindow2_Closing(Objectsender,System.ComponentModel.CancelEventArgse){GC.Collect();GC.WaitForPendingFinalizers();当您将Image.Source属性绑定到当您创建Uri(或内部来自Uri的字符串)时,WPF使用内置类型转换器从Uri创建BitmapFrame。如果Uri包含本地文件的路径,只要文件存在,BitmapFrame就会保持打开状态。这可能比您在应用程序中实际使用的时间长,因为它可能被WPF缓存。当您需要能够删除从中加载图像的文件时,应始终使用FileObject方法,但它应该如下所示:publicImageSourceImage{get{...varbi=newBitmapImage();使用(varfs=newFileStream(FileName,FileMode.Open,FileAccess.Read)){bi.BeginInit();bi.CacheOption=BitmapCacheOption.OnLoad;bi.StreamSource=fs;bi.EndInit();}返回双;}}或像这样:publicImageSourceImage{get{using(varfs=newFileStream(FileName,FileMode.Open,FileAccess.Read)){returnBitmapFrame.Create(fs,BitmapCreateOptions.None,BitmapCacheOption.OnLoad);}}}或使用绑定转换器将Binding绑定到FileName属性,绑定转换器创建一个BitmapImage或BitmapFrame,如上所示。使用此代码,稍后我将解释问题所在。以上就是C#学习教程:WpfImageControl会阻止这个文件的所有内容被分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——varimage=newBitmapImage();image.BeginInit();image.CacheOption=BitmapCacheOption.OnLoad;image.CreateOptions=BitmapCreateOptions.IgnoreImageCache;image.UriSource=newUri(文件路径);image.EndInit();返回图像;请点击右侧联系管理员删除。如需转载请注明出处: