少し奇妙な問題があり、デバッグが難しいことがあります。プログラムを閉じることができず、閉じようとするとフリーズすることがあります。
私はビデオ画像認識のための大きなプログラムを作りました。カメラを閉じるための特別なボタンを作りました。このボタンは、以下の関数を呼び出すことでこれと連動し、実際に機能します。
private void exitcamera()
{
FinalVideo.SignalToStop();
FinalVideo.WaitForStop();
FinalVideo = null;
}
元のビデオがこのように開始されたことに注意してください
private void buttonStartCamera_Click(object sender, EventArgs e)
{
FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideo.DesiredFrameSize = new System.Drawing.Size(640, 480);
FinalVideo.DesiredFrameRate = 90;
FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
FinalVideo.ProvideSnapshots = true; //snapshots
FinalVideo.Start();
}
今、私の問題は思われます(そして、これは私がこの瞬間をデバッグできないので推測です)いくつかのスレッドがまだアクティブであり、メインフォームをデータで更新したいと思っています。ただし、閉店しているため、できない場合があります。そういうことが起こっていると思うので、メインの申込書に書きました
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// Thread.Sleep(1000); // not sure about these delays might help syncing threads
ExitCamera();
Thread.Sleep(1000);
}
ただし、最後のコードが配置されていると、プログラムを終了するのにさらに問題が発生します。
サブスレッドに出口を送信したいのですが、名前がわかりません(名前がある場合)。サブスレッドを一覧表示する方法や、コードの一部ではない別のdllにあることを停止するように指示する方法がわかりません。いくつかのdllから私はコードを持っていません。
では、サブスレッドを一覧表示してから1つずつ閉じる方法はありますか?上隅の右十字を押してアプリケーションを終了する場合はどうでしょうか。