У меня вопрос о событиях в .NET (C#). Мне приходилось писать код для нескольких ситуаций, когда у меня запущена фоновая задача, и я хочу уведомить основной поток или класс контроллера о том, что что-то произошло, например, задача завершена или завершено копирование файла, но я этого не делал. Не нужно, чтобы фоновая задача ждала, пока делегат основного потока обработает событие.
Я хочу сделать что-то вроде передачи сообщений: отправить сообщение, но кого волнует, что они с ним сделают.
Например:
Класс написан для обработки нескольких процессов последовательно, один за другим. Каждый процесс должен работать в фоновом потоке. Когда работа завершена, запускается событие и сообщает контроллеру, что оно выполнено (скажем, с помощью метода OnCompleted()).
Проблема заключается в том, что если обработчик событий контроллера используется для запуска последующего процесса, метод OnComplete предыдущих процессов остается в стеке вызовов (никогда не завершает выполнение) до завершения всех процессов.
Как в этой ситуации фоновая задача может уведомить класс контроллера о том, что работа выполнена, не сохраняя метод вызова события в стеке?
Пример 2: программа резервного копирования.
Фоновый поток запускается для копирования каждого файла в место назначения. Фон должен уведомить пользовательский интерфейс о последнем скопированном файле, но ему не нужно ждать обновления пользовательского интерфейса. Вместо этого он просто хочет сказать: «Кстати, вот немного информации. Теперь позвольте мне вернуться к работе». Прослушиватель событий не должен блокировать обработку генератора событий.