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