Какова правильная техника для того, чтобы иметь ThreadA сигнал ThreadB какого-либо события, без блокировки ThreadB, ожидающего события?
У меня есть фоновый поток, который будет заполнять общий список <T> . Я пытаюсь найти способ асинхронно сигнализировать "основной" поток, что есть данные, которые можно получить.
Я рассмотрел возможность установки события с объектом EventWaitHandle, но я не могу использовать мой основной поток в Event.WaitOne().
Я считал, что имеет обратный вызов делегата, но a) я не хочу, чтобы основной поток выполнял работу в делегате: поток должен вернуться к работе, добавляя больше вещей - я не хочу, чтобы он ждал, пока делегат выполняет, и b) делегат должен быть подключен к основному потоку, но я не управляю пользовательским интерфейсом, у меня нет элемента управления для. Включение делегата против.
Я рассмотрел запрос обратного вызова делегата, который просто запускает нулевой интервал System.Windows.Forms.Timer(с доступом потока к синхронизированному таймеру). Таким образом, поток нужно только застревать, поскольку он вызывает
Timer.Enabled = true;
но это похоже на взлом.
В прежние дни мой объект создавал бы скрытое окно и имел сообщения с сообщениями о потоке в эти скрытые окна "HWND". Я считал создание скрытого элемента управления, но я понимаю, что вы не можете. Включение элемента управления без создания дескриптора. Кроме того, у меня нет интерфейса: мой объект мог быть создан на веб-сервере, службе или консоли, я не хочу, чтобы появился графический элемент управления, и я не хочу компилировать зависимость от System.Windows. Формы.
Я считал, что мой объект выставляет интерфейс ISynchronizeInvoke, но тогда мне нужно будет реализовать .Invoke() и эту проблему.
Какова надлежащая техника для потока Thread Сигнальная нить B какого-либо события, без блокировки потока B, ожидающего события?