0

編集: 私はついにエラーを見つけました。ビットマップ、ストリーム、または静的とはまったく関係ありません。同僚の 1 人がメール送信後にメールの添付ファイルを削除するのを忘れていたようで、メール添付サービスが開いたままになっています。メール送信処理全体に using ステートメントを使用しましたが、解決しました。みんな、ありがとう。

同じタイトルのスレッドが何十億もあり、これは重複していると言うかもしれませんが、そうではないと信じています. 私は7時間ほど解決策を探していましたが、これまでのところ何も役に立ちませんでした.

問題は次のとおりです。これは、WebcamSource を Web カメラとして使用する写真キャプチャ アプリケーションです。最初の写真が撮影され、ユーザーに電子メールで送信されると、アプリケーションは正常に動作します。ただし、ユーザーがプロセスに最初から戻ると (最初の実行前にプロセスが開始された場所)、アプリケーションはそのようなエラーを返します。間違ったコードは以下です。

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[ユーザー名]\Dropbox[プロジェクト名][プロジェクト名]\bin\Debug\Photos」にアクセスできません。

BitmapCreateOptions.Noneウェブカメラ ストリームを閉じ、コードを try/catch で囲み、それを using ステートメントに入れ、FileAccess フィールドと FileShare フィールドを追加し、andを追加しようとしましBitmapCacheOption.OnLoadた (許可されませんでした)、同じ画像を上書きするのではなく、別の名前で新しい画像を作成しました、メールを送信した後に画像を削除する(同じエラーが発生しました)、およびファイルアクセスの問題を引き起こす可能性のあるいくつかの小さな手配。

4

2 に答える 2

-1

この時点に到達する前に、コード内の他の場所でそのファイルの場所 (主に Photos フォルダー) を参照していますか?

コードの他の場所でこれにアクセスしたようで、接続が閉じられていませんUsing。IO メソッドを呼び出すたびにブロックを使用すると便利です。

理想的ではありませんが、後で電話GC.Collect()してみてくださいencoder.Rotation = Rotation.Rotate270;

于 2013-08-20T13:42:19.530 に答える