0

编辑: 我终于找到了错误。它与位图或流或静态完全无关。我的一位同事似乎在发送邮件后忘记删除电子邮件附件,并且邮件附件服务保持打开状态。我在整个邮件发送过程中使用了一个 using 语句,它已经解决了。感谢大家。

我知道您可能会说有数十亿个线程具有相同的标题,这是重复的,但相信我不是。我一直在寻找 7 个小时的解决方案,但到目前为止没有任何帮助。

问题如下: 这是一个使用 WebcamSource 作为网络摄像头的照片捕捉应用程序。当拍摄第一张照片并通过电子邮件发送给用户时,该应用程序运行良好。但是,当用户再次返回该进程(它在第一次运行之前开始的位置)时,应用程序会给出这样的错误。错误代码如下。

public static void SaveImageCapture(BitmapSource bitmap)
        {

                JpegBitmapEncoder encoder = new JpegBitmapEncoder();
         //     bitmap = BitmapFrame.Create(BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
                encoder.Frames.Add(BitmapFrame.Create(bitmap));
                encoder.QualityLevel = 100;
                encoder.Rotation = Rotation.Rotate270;
                try
                {
                    using (FileStream fstream = new FileStream("Photos\\" + fileName + ".jpg", FileMode.Create))
                    {
                        encoder.Save(fstream);
                        fstream.Close();

                    }
                }
                catch (Exception e) {
                    System.Windows.Forms.MessageBox.Show(e.ToString());
                }

        }

代码崩溃FileStream fstream = new FileStream("Photos\\" + fileName + ".jpg", FileMode.Create)并给出错误

该进程无法访问文件“C:\Users[username]\Dropbox[projectname][projectname]\bin\Debug\Photos”,因为它正被另一个进程使用。

我尝试关闭网络摄像头流,用 try/catch 包围代码,将其放入 using 语句,添加 FileAccess 和 FileShare 字段,尝试添加BitmapCreateOptions.NoneBitmapCacheOption.OnLoad(它不允许我),创建具有不同名称的新图像,而不是覆盖相同的图像,发送电子邮件后删除图像(它给了我同样的错误),以及一些可能导致文件访问问题的小安排。

4

2 回答 2

-1

我建议使文件名更通用,以便附加时间戳或其他内容,但另外,在之前的using调用中fstream.Flush()fstream.Close()

于 2013-08-20T13:30:50.083 回答
-1

在到达这一点之前,您是否在代码中的其他任何地方引用了该文件位置(主要是照片文件夹)?

似乎您已经在代码的其他地方访问了它,并且与它的连接尚未关闭 -Using每当调用 IO 方法时使用该块很方便。

虽然不理想,但尝试调用GC.Collect()encoder.Rotation = Rotation.Rotate270;

于 2013-08-20T13:42:19.530 回答