Если «сигнал» представляет собой сообщение, отправляющее некоторые данные между потоками, рассмотрите возможность использования очереди «производитель/потребитель».
Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование
·
Стивен Клири