1

以前の質問で、私が経験していたメモリ リークの問題に対する素晴らしい解決策が提供されました。ただし、問題が 1 つあります。解決策には、最後の反復が完了する前に呼び出されたように見えるイベント ハンドラー内の不要なデータを破棄することが含まれます。ウェブカメラから新しいフレームが取得されるたびに、このイベント ハンドラが呼び出されます。

    private void Handle_New_Frame(object sender, NewFrameEventArgs eventArgs)
    {
        //textBox1.Text = "Frame #: " + counter;
        //counter++;

        //bitmap = (Bitmap)eventArgs.Frame.Clone();
        if (bitmap != null)
            bitmap.Dispose();
        bitmap = new Bitmap(eventArgs.Frame);

        //bitmap = AForge.Imaging.Image.Clone(eventArgs.Frame);


        if (videoPictureBox1.Image != null)
            videoPictureBox1.Dispose(); //THE CRASH HAPPENS HERE. 
        videoPictureBox1.Image = bitmap;
    }

エラー: クロススレッド操作が無効です: コントロール 'videoPictureBox1' は、それが作成されたスレッド以外のスレッドからアクセスされました。

私の問題は、私が C# のスレッド化にまったく慣れておらず、一般的にスレッド化に慣れていないことです。StackOverflow で同様の質問を見つけましたが、自分の問題に関連する十分な情報を引き出して正しい軌道に乗せることができたものはありませんでした (または、答えを正しく見て見逃したのかもしれません!)

以下のリンクで MSDN の回答を 2 つ見つけましたが、どのソリューションが自分の問題に最も適しているかを把握するのにまだ少し苦労しています。

http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k%28EHInvalidOperation.WinForms.IllegalCrossThreadCall%29;k%28TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5%29;k %28DevLang-csharp%29&rd=true

http://msdn.microsoft.com/en-us/library/8843a9ch.aspx

このように短い質問を続けて 2 つ行ってしまい、しかも同じトピックについて申し訳ありません。適切な方向へのナッジがないと、私は間違った場所を見て、しばらくグーグルで水から出た魚のように飛び回るかもしれない.

私の質問: このエラーを回避するには、どの方法が最も適していると思いますか? これを理解するのに役立つドキュメント、サンプル コード、またはチュートリアルを知っていれば、それも素晴らしいことです。

ありがとう!

4

1 に答える 1