我试图在修改后从视图模型中删除一个图像但是我收到此错误消息IOException was unhandled
我处理了当前位图currImgHandler.CurrentBitmap.Dispose();
,并使图像源为空ViewedPhoto.Source = null;
如果我点击具有旋转功能(90°)一次的按钮并且使用产生错误的删除功能IOException was unhandled
如果我按下Roate函数twice
按钮,则点击删除功能;我没有收到任何错误,它删除图像没有任何问题。
我在这里做的错误是什么?谢谢
从ListView中选择图像:
private string saveFilname;
private void showImage(object sender, SelectionChangedEventArgs args)
{
ListBox list = ((ListBox)sender);
if (list != null)
{
int index = list.SelectedIndex;
if (index >= 0)
{
ImageFileViewModel image = imageListBox.SelectedItem as ImageFileViewModel;
if ((image != null))
{
saveFilname = image.FileName.ToString();
currImgHandler.CurrentFileHandler.Load(image.FileName);
PaintImage();
}
}
}
}
删除功能:
private void bDeletePhoto_Click(object sender, RoutedEventArgs e)
{
ImageFileCollectionViewModel viewModel = imageListBox.DataContext as ImageFileCollectionViewModel;
if (viewModel != null)
{
ImageFileViewModel image = imageListBox.SelectedItem as ImageFileViewModel;
if (image != null)
{
//remove physical file from disk:
currImgHandler.CurrentBitmap.Dispose();
ViewedPhoto.Source = null;
File.Delete(image.FileName);
//remove item from ObservableCollection:
viewModel.AllImages.Remove(image);
}
}
}
//旋转功能:
private void Button_Click(object sender, RoutedEventArgs e)//Rotate
{
currImgHandler.CurrentRotationHandler.Flip(RotateFlipType.Rotate90FlipNone);
PaintImage();
}
private void PaintImage()
{
System.IO.MemoryStream stream = new System.IO.MemoryStream();
currImgHandler.CurrentBitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
stream.Position = 0;
byte[] data = new byte[stream.Length];
stream.Read(data, 0, Convert.ToInt32(stream.Length));
BitmapImage bmapImage = new BitmapImage();
bmapImage.BeginInit();
bmapImage.CacheOption = BitmapCacheOption.OnLoad;
bmapImage.StreamSource = stream;
bmapImage.EndInit();
ViewedPhoto.Source = bmapImage; //ImageBox
ViewedPhoto.Stretch = Stretch.Uniform;
}
错误讯息:
答案 0 :(得分:0)
您的应用程序正在抛出IOException
。可能是罪魁祸首:
File.Delete(image.FileName);
IMO你应该避免直接在事件处理程序中进行这样的调用,原因是这里演示的原因 - 很难捕获直接从事件处理程序抛出的异常。
如果实施MVVM,则不会发生这种情况。
答案 1 :(得分:0)
也许运行应用程序的帐户权限不足以让您删除该文件。请根据您要删除的文件的操作检查此帐户的凭据。
但这只是一个假设,如果没有IOEXception
内容,很难确定,也可能是因为你使用的路径不是存在等...
答案 2 :(得分:0)
在Drew R
建议之后,我在MVVM中添加了一个方法:
public void RemoveOldPhotoItem(ImageFileViewModel imageFile)
{
this._allImages.Remove(imageFile);
this.DataItemsCount++;
File.Delete(imageFile.FileName);
}
我需要处理第三方使用的图像。我正确处理的图像。 对不起,伙计们,这是我的错。感谢您的支持!