Как реализовать выполнение очереди комманд в дочернем потоке?
Используйте ConcurrentQueue, обернутый в BlockingCollection, для передачи сообщений между потоками. Тот поток, который читает команды из очереди, может вообще висеть все время - пока он один и он спит, это вообще не проблема.
Используйте mutex, locker, или любой другой механизм блокировки (в обоих методах).