private void RunPostMessage() { while (true) { lock (queue){ while (queue.IsEmpty) { Monitor.Wait(queue); } string data = null; if (queue.TryDequeue(out data) && active) { channel.WriteLine(data); } } if (!active) { return; } } }