【问题标题】:WPF: How can I use a picture while I'm showing it?WPF:如何在显示图片时使用图片?
【发布时间】:2010-12-30 21:05:16
【问题描述】:

我正在尝试这样做,但程序抛出了这个异常:

在 mscorlib.dll 中发生了“System.IO.IOException”类型的未处理异常

附加信息:该进程无法访问文件“C:\Users\Roy\documents\visual studio 2010\Projects\Assignment3\Assignment3\bin\Debug\Images\Chrysanthemum.jpg”,因为它正被另一个进程使用.

有没有办法在它打开的时候使用它?

代码:

if (imgAddMessage.Source != null)
            {
                BitmapImage src = (BitmapImage)imgAddMessage.Source;
                if (!Directory.Exists("Images"))
                {
                    Directory.CreateDirectory("Images");
                }

                FileStream stream = new FileStream("Images/" + imageName, FileMode.Create, FileAccess.ReadWrite);
                JpegBitmapEncoder encoder = new JpegBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(src));
                encoder.Save(stream);
                stream.Close();
            }

【问题讨论】:

  • 您能发布您的代码吗?它会有所帮助。
  • 你能创建一个图像的副本来使用吗?
  • 我假设您在尝试创建 FileStream 时遇到了异常。该文件实际上是否在另一个程序中打开?或者也许在你的程序中?如果进程以独占访问权限打开文件,您将无法对其进行写入。

标签: c# wpf image


【解决方案1】:

两件事。

1) 您发布的代码没有围绕 FileStream 的 using 语句,也没有在其上调用 Dispose。

2) 无论哪段代码显示您要保存的图片,都必须使用 FileAccess.Read,因为只有一段代码可以持有文件的写锁。更好的是,如果显示文件的是您自己的程序,只需将图像缓存到内存中并根据内存中的字节显示图像。然后你就不会对文件进行任何锁定,以后可以对它做任何你想做的事情......

【讨论】:

    【解决方案2】:

    只是好奇你是否还有问题。
    您是否尝试过以下操作?

    if (imgAddMessage.Source != null)
    {
        string imageDirectory = "pack://application:,,,/Images";
        BitmapImage src = (BitmapImage)imgAddMessage.Source;
        if (!Directory.Exists(imageDirectory))
            Directory.CreateDirectory(imageDirectory);
    
        using (FileStream stream = new FileStream(Path.Combine(imageDirectory, imageName), FileMode.Create, FileAccess.ReadWrite))
        {
            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(src));
            encoder.Save(stream);
        }
    }
    

    正如@Marco 所说,您必须具有读/写权限

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多