private void PreprocessThread() { GOMLib.GOM_Object_Sketch sketchObj; System.Collections.ArrayList sketch; while (!m_bTerminating) { m_QueueNotEmpty.WaitOne(); sketch = null; sketchObj = null; m_Mutex.WaitOne(); if (m_bTerminating) { m_Mutex.ReleaseMutex(); return; } else if ((m_rgSketchObj.Count > 0) && (m_rgSketch.Count > 0)) { sketchObj = (GOMLib.GOM_Object_Sketch)m_rgSketchObj[0]; sketch = (System.Collections.ArrayList)m_rgSketch[0]; m_rgSketchObj.RemoveAt(0); m_rgSketch.RemoveAt(0); if ((m_rgSketchObj.Count == 0) || (m_rgSketch.Count == 0)) { m_QueueNotEmpty.Reset(); } } m_Mutex.ReleaseMutex(); try { if ((sketch != null) && (sketchObj != null)) { m_curSketchObj = sketchObj; HandlePreprocessResult(m_preprocess.RecognizeStroke(EncodeSketchToXML(sketch))); } } catch { System.Windows.Forms.MessageBox.Show("Exception occurs on stroke recognition."); m_preprocess = null; m_preprocess = new Preprocessing.CStrokeRecognitionClass(); } } }
public PreprocessQueue() { UpdateRequired = null; m_curSketchObj = null; m_bTerminating = false; m_bDebugging = false; m_debugSketch = null; m_debugStroke = null; m_rgSketchObj = new ArrayList(); m_rgSketch = new ArrayList(); m_preprocess = new Preprocessing.CStrokeRecognitionClass(); m_refine = new StrokeRefineLib.CStrokeRefinementClass(); m_WorkerThread = new System.Threading.Thread(new System.Threading.ThreadStart(PreprocessThread)); m_Mutex = new System.Threading.Mutex(); m_QueueNotEmpty = new System.Threading.ManualResetEvent(false); }