我有一个奇怪的问题,我发现很难调试有时我无法关闭我的程序,当我尝试关闭它时它会冻结。
我做了一个视频图像识别的大程序。我做了一个特殊的按钮来关闭相机。这个按钮通过调用下面的函数来工作,它确实有效。
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我没有代码。
那么有没有办法列出子线程,然后一一关闭,如果按右上角的右叉退出应用程序呢?