Coudl不从View Model中删除文件:IOException未处理

时间:2014-03-11 13:52:33

标签: c# .net wpf image .net-4.0

我试图在修改后从视图模型中删除一个图像但是我收到此错误消息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;
}

错误讯息: enter image description here

3 个答案:

答案 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);
        }

我需要处理第三方使用的图像。我正确处理的图像。 对不起,伙计们,这是我的错。感谢您的支持!