当前位置:编程学习 > asp >>

WPF如何删除已经打开的图片文件

 

在WPF中,你也许会碰到这种情况,图片在界面打开,想用File.Delate()删除却无法删除。

 

比如:

 

XAML:

 

<Window x:Class="WPF_Testing_Application.Window1"

 

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

 

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

 

Title="Window1" Height="300" Width="300">

 

<StackPanel Height="100" Name="stackPanel1" Width="200" />

 

</Window>

 

Code:

 

public Window1()

 

{

 

InitializeComponent();

 

BitmapImage bi = new BitmapImage();

 

bi.BeginInit();

 

bi.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves - Copy.jpg");

 

bi.EndInit();

 

Image image1 = new Image();

 

image1.Source = bi;

 

stackPanel1.Children.Add(image1);

 

stackPanel1.MouseLeftButtonDown += delegate { DeleteImage(); };

 

}

 

private void DeleteImage()

 

{

 

stackPanel1.Children.RemoveAt(0);

 

File.Delete(@"C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves - Copy.jpg");

 

}

 

 

这样会出现文件被占用,无法删除的异常。

 

 

解决办法:www.zzzyk.com

 

把代码改成:

 

public Window1()

 

{

 

InitializeComponent();

 

BitmapImage bi = new BitmapImage();

 

bi.BeginInit();

 

bi.CacheOption = BitmapCacheOption.OnLoad; //增加这一行

 

bi.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves - Copy.jpg");

 

bi.EndInit();

 

Image image1 = new Image();

 

image1.Source = bi;

 

stackPanel1.Children.Add(image1);

 

stackPanel1.MouseLeftButtonDown += delegate { DeleteImage(); };

 

}

 

就可以了。

如果你用ObservableCollection<BitmapImage>作为datasouce,

 

             BitmapImage bmp = new BitmapImage();

 

              bmp.BeginInit();

 

              bmp.UriSource = new Uri("Blue hills.jpg", UriKind.Relative);

 

              bmp.CacheOption = BitmapCacheOption.OnLoad;

 

              bmp.EndInit();

 

 

用以下方式删除就可以了:

 

BitmapImage img = (BitmapImage)listPictures.SelectedItem;

 

File.Delete(img.UriSource.ToString());

 

摘自 soft2buy

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,