Хорошо, это какая-то странная проблема, и я надеюсь, что кто-то сможет пролить свет. У меня есть следующий код:
static void Main(string[] args)
{
try
{
Console.WriteLine("in try");
throw new EncoderFallbackException();
}
catch (Exception)
{
Console.WriteLine("in Catch");
throw new AbandonedMutexException();
}
finally
{
Console.WriteLine("in Finally");
Console.ReadLine();
}
}
СЕЙЧАС, когда я скомпилирую это для целевой версии 3.5 (2.0 CLR), появится окно с сообщением "XXX перестала работать". Если я сейчас нажму кнопку "Отмена", он запустит окончательно, И если я подожду, пока он не будет выглядеть, и нажмите кнопку "Закрыть программу", он также запустит окончательно.
Теперь, что интересно и запутанно, ЕСЛИ я делаю то же самое, скомпилированное против 4.0. Нажатие на кнопку "Отмена" запустит блок finally и нажатие кнопки "Закрыть программу" не будет.
Мой вопрос: зачем, наконец, запускать 2.0, а не 4.0 при нажатии кнопки Close Program? Каковы последствия этого?
EDIT: Я запускаю это из командной строки в режиме деблокирования (встроенный режим выпуска) в Windows 7 32 бит. Сообщение об ошибке: первый результат ниже работает на 3.5, закрывая окно после того, как окна ищут проблему, во-вторых, когда я запускаю его на 4.0 и делаю то же самое.