После запроса этого вопроса, мне интересно, можно ли ожидать, когда будет запущено событие, а затем получить данные о событии и вернуть его часть. Пример:
private event MyEventHandler event;
public string ReadLine(){ return event.waitForValue().Message; }
...
event("My String");
...elsewhere...
var resp = ReadLine();
Пожалуйста, убедитесь, что любое решение, которое вы предоставляете, возвращает значение напрямую, а не получает его от чего-то другого. Я спрашиваю, доступен ли какой-либо метод выше. Я знаю об Auto/ManuelResetEvent, но я не знаю, что они возвращают значение напрямую, как я сделал выше.
Обновление: Я объявил событие с использованием MyEventHandler
(который содержит поле Message
). У меня есть метод в другом потоке с именем ReadLine
, ожидающем, когда событие будет запущено. Когда событие срабатывает, метод WaitForValue (часть сцены обработки событий) возвращает аргументы событий, которые содержат сообщение. Сообщение затем возвращается ReadLine ко всему, что вызвало его.
Принятый ответ на этот вопрос Я спросил, что я сделал, но это просто не чувствую себя совершенно правильно. Похоже, что что-то может произойти с данными между запуском ManuelResetEvent и программой, получающей данные и возвращающими ее.
Обновление: Основная проблема с Auto/ManualResetEvent
заключается в том, что она слишком уязвима. Поток мог дождаться события, а затем не дать достаточно времени, чтобы кто-либо еще мог его получить, прежде чем менять его на что-то другое. Есть ли способ использовать блокировки или что-то еще? Может быть, использовать инструкции get и set.