Существует ряд причин, являющихся внутренними или внешними, которые приводят к заблокированному приложению, более общий случай - это когда программа запрашивает что-то, но не приводится, что приводит к бесконечному ожиданию, практический пример - программа записывает некоторый текст в файл, но когда он собирается открыть файл для записи, этот же файл открывается любым другим приложением, поэтому запрашивающее приложение будет ждать (в некоторых случаях зависать, если не закодировано должным образом), пока не получит эксклюзивный контроль файла.
И критическое замораживание, которое приводит к перезапуску системы, - это когда запрашиваемый файл является чем-то очень важным для ОС. Однако вам может не потребоваться перезапускать систему, чтобы вернуть ее в нормальное состояние, если только программа, которая была заморожена, не написана на языке, который создает собственный двоичный файл, то есть на C / C ++, если быть точным. Поэтому, если приложение написано на языке, который работает с концепцией управляемого кода, как и любой другой язык .NET, ему не понадобится перезапуск системы, чтобы все нормализовалось.