解决WPF BitmapImage图片资源无法删除,文件正在被另一个进程使用
来源:互联网 发布:淘宝的导购网站 编辑:程序博客网 时间:2024/06/07 16:17
代码如下所示,项目本意是想在窗体加载时显示一张图片,然后点击按钮,删除该图片。
可是如下代码,在点击delete按钮时,项目报异常:“...无法删除,文件正在被另一个进程使用”,
xaml 代码:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Grid.Row="1" Click="Button_Click" Content="Delete" Margin="212,16,183,58" />
</Grid>
C#代码
public partial class MainWindow : Window
{
string filePath = @"D:/11.图片/6.jpg";
Image image;
BitmapImage bitmapImage;
public MainWindow()
{
InitializeComponent();
image=new Image();
bitmapImage = new BitmapImage(new Uri(filePath, UriKind.Absolute));
image.Source=bitmapImage;
this.LayoutRoot.Children.Add(image);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.LayoutRoot.Children.Remove(image);
File.Delete(filePath); //这里出现异常
}
}
查了一些资料,这个异常的根本原因是因为BitmapImage没有Dispose()方法,系统虽然删除了image,但是图片文件仍然被当前进程占用着。
于是,将源代码修改如下解决(不再给BitmapImage直赋filePath,而是先根据filePath读取图片的二进制格式,赋给BitmapImage的Source,这样就可以在图片读取完毕后关闭流)。
解决后的代码如下:
public partial class MainWindow : Window
{
string filePath = @"D:/11.图片/6.jpg";
BitmapImage bitmapImage;
Image image;
public MainWindow()
{
InitializeComponent();
this.InitImage();
}
private void InitImage()
{
using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
{
FileInfo fi = new FileInfo(filePath);
byte[] bytes = reader.ReadBytes((int)fi.Length);
reader.Close();
image = new Image();
bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = new MemoryStream(bytes);
bitmapImage.EndInit();
image.Source = bitmapImage;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
this.LayoutRoot.Children.Add(image);
}
}
文章来自学IT网:http://www.xueit.com/html/2011-02/111-801833600201122291256640.html
- 解决WPF BitmapImage图片资源无法删除,文件正在被另一个进程使用
- 怎么解决文件正在使用无法删除----资源监视器
- WPF BitmapImage 占用资源无法释放、无法删除的问题
- WPF中使用BitmapImage处理图片文件
- WPF中使用BitmapImage处理图片文件
- WPF中使用BitmapImage处理图片文件 .
- C# 中WPF BitmapImage资源无法释放的问题
- 如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- WPF的Image控件使用BitmapImage的资源占用问题
- WPF中的图片文件、byte[]、BitmapImage的操作
- VS 编译提示 无法将“obj\Debug\*.*”复制到“bin\Debug\*.*”,文件...正在由另一个进程使用,因此该进程无法访问此文件 解决办法
- VS调试出现错误提示 无法将“obj\Debug\*.*”复制到“bin\Debug\*.*”,文件正在由另一个进程使用,因此该进程无法访问此文件
- oracle11g卸载出错 无法删除文件,文件正在使用中
- 【旧资料整理】无法删除文件,文件正在被另一个人或程序使用和无法删除硬件 完美解决办法
- 重启服务器IIS网站时 出现另一个进程正在使用 无法重启
- 解决:删除文件时“文件正在使用”不能完成
- 数据库正在使用,无法删除
- 异常详细信息: System.Data.SqlClient.SqlException: 无法打开物理文件 。。。 操作系统错误 32:"32(另一个程序正在使用此文件,进程无法访问。
- PHP删除字符串中的中文的正则表达式兼容gbk/gb2312/utf-8
- 如何更改Magento指定页面的标题(title)?
- DuraSpace:DSpace与Fedora 提供的联合服务
- Fedora和Dspace合并为DurSpace
- vc中怎么使用SendMessage自定义消息函数
- 解决WPF BitmapImage图片资源无法删除,文件正在被另一个进程使用
- 常用的ubuntu使用技巧
- ehcache 与spring相结合超时自动刷新缓存的框架搭建
- 鲜为人知的编程真相
- HP大中华区总裁孙振耀退休感言 :
- oracle ORA-12526: TNS: 监听程序: 所有适用例程都处于受限模式问题处理
- 云计算环境下图书馆变革的进展与趋势
- java使用创建Word文件示例
- Linux socket 结构体关系 及 获得本地IP和广播地址