void StartThread() { //Initialize COM object lock (threadInitialized) { try { session = CreateComInstance(); encoder = GetEncoder(session); } catch (Exception) { connectException = true; } Monitor.Pulse(threadInitialized); if (connectException) //!!Close connections? { ReleaseComInstance(session); return; } } //Use thread to gather data from COM object DataLoop(); //!!End channels and queues /* for (int i = 0; i < channels.Length; i++) { queues[i].SignalExit(); queues. }*/ session.CloseConnections(); ReleaseComInstance(session); return; }