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