2

Aforge(ビデオライブラリです)をベースにプログラムを作りました。このライブラリは、カメラからの次のビデオ フレーム用に独自の更新イベントを作成します。これまでのところ、以前の人々がマルチスレッド化で私を助けてくれたので、これらの Aforge スレッドはメイン プログラム スレッドに報告できるようになりました。

コードはここで見ることができます: how to do multithreading when using outside referenced code

しかし今では、定期的に新しいプログラム エラーに気付きます。プログラムを終了したいときに問題が始まります。現時点では、Aforge スレッドがまだアクティブである可能性があります。そして閉じたメインフォームに書き戻したい。

プログラムを閉じる前に、どういうわけか他のスレッドを停止する必要があります。Aforge にはカメラ停止などを行うオプションがありますが、それだけでは十分ではありません。しかし、それでも私のコードは、すでに閉じているメインフォームに書きたいと思っています。

すべてのスレッドを停止する方法、または元のスレッドから安全に閉じる方法はありますか? メイン プログラムへのバック レポートを try catch 構造に配置しましたが、うまく機能しませんでした。これらの状況で停止する唯一の方法は、Visual Studio 自体の実行停止ボタンを押すことです。

4

1 に答える 1

2

私があなたの問題を正しく理解していればInvoke、フォームを閉じた直後に、フォーム上で呼び出しが発生する可能性があります。私もこんなことがありました。

私がやったことは、フォームを閉じ始めたときに「シャットダウン」変数を設定し、それを使用AppDomain.CurrentDomain.UnhandledExceptionして(または取得しているものを)監視しInvalidOperationException、シャットダウンが設定されているかどうかを無視することです。

于 2012-10-30T19:42:49.733 に答える