Ответ 1
Environment.Exit() - более жестокий способ закрыть приложение, но в целом, если вам нужно убить приложение чтобы закрыть его, я думаю, что вы рассматриваете проблему не так. Вы должны лучше изучить, почему не закрываются другие потоки?
Вы можете заглянуть в событие FormClosing в основной форме и закрыть все ресурсы, которые подвешивают приложение, не позволяя ему закрыться.
Вот как я нашел ресурсы, зависящие от приложения.
- В режиме отладки включите показ threads (это позволит вам видеть все потоки, на которые запущено приложение)
- Закройте приложение так, чтобы оно не было правильно закрыто.
- Нажмите кнопку паузы в Visual Studio
- Посмотрите на список тем и щелкните по ним, чтобы увидеть, где он находится в коде, который они висят, теперь, когда вы можете видеть, какие ресурсы блокируют ваше приложение от закрытия, перейдите к событию FormClosing и закройте его /Dispose.
- Повторяйте до тех пор, пока приложение не закроется правильно:)
Имейте в виду, что список потоков в режиме отладки покажет некоторые потоки, которые запускаются, но не под вашим контролем, эти потоки имеют имя, и когда вы нажимаете на них, вы получаете сообщение о том, что у вас нет символов. Их можно безопасно игнорировать.
Одна из причин того, что ваше приложение закрывается грациозно, заключается в том, что если некоторые ресурсы (скажем, FileStream) не сделав работу, поэтому, используя некоторые api, чтобы заставить ее быстро, могут возникнуть всевозможные "случайные" проблемы, например, файлы настроек/данных, которые не записываются, и т.д.