在WPF中,你也许会碰到这种情况,图片在界面打开,想用File.Delate()删除却无法删除。
比如:
XAML:
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
Code:
public Window1()
{
InitializeComponent();
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(@"C:UsersPublicPicturesSample PicturesAutumn 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:UsersPublicPicturesSample PicturesAutumn Leaves - Copy.jpg");
}
这样会出现文件被占用,无法删除的异常。
解决办法:www.2cto.com
把代码改成:
public Window1()
{
InitializeComponent();
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad; //增加这一行
bi.UriSource = new Uri(@"C:UsersPublicPicturesSample PicturesAutumn Leaves - Copy.jpg");
bi.EndInit();
Image image1 = new Image();
image1.Source = bi;
stackPanel1.Children.Add(image1);
stackPanel1.MouseLeftButtonDown += delegate { DeleteImage(); };
}
就可以了。
如果你用ObservableCollection作为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