Я создаю программу с несколькими проектами, и некоторые проекты сообщают об основных сообщениях проекта для целей ведения журнала.
Поскольку я использую асинхронные сокеты, некоторые из этих сообщений возвращаются в разных потоках, поэтому, как только они попадают в основной поток, я проверяю InvokeRequired, и если это правда, я использую this.BeginInvoke для обработки журнала.
Мне нужно обрабатывать это в потоке пользовательского интерфейса, особенно в случае сервера, где я показываю последние зарегистрированные сообщения в ListBox, чтобы я мог следить за ходом операций во время моих тестов.
Я знаю, что иногда может случиться так, что несколько сообщений перепутаются, но пока я могу с этим смириться. По какой-то причине, если я использую Invoke вместо BeginInvoke, сервер рухнет, если я остановлю его, пока клиенты подключены, и даже не выдаст никаких исключений. Но с помощью BeginInvoke я преодолел это.
Мой вопрос касается понимания того, как работают события и BeginInvoke в случае завершения программы. Если событие находится в очереди или непосредственно перед закрытием программы был вызван BeginInvoke, будет ли оно немедленно завершено, отменив все? или он выполнит все ожидающие действия, в моем случае зарегистрирует ожидающее сообщение, а затем выйдет?