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 ,