private void Free()
{
if (imageProcessingThread != null)
{
nestedVideoSource.NewFrame -= new NewFrameEventHandler(nestedVideoSource_NewFrame);
// make sure processing thread does nothing
isProcessingThreadAvailable.WaitOne();
// signal worker thread to stop and wait for it
lastVideoFrame = null;
isNewFrameAvailable.Set();
imageProcessingThread.Join();
imageProcessingThread = null;
// release events
isNewFrameAvailable.Close();
isNewFrameAvailable = null;
isProcessingThreadAvailable.Close();
isProcessingThreadAvailable = null;
}
}