Для консольного приложения под VS2010 и .NET 4.0 я использую следующий (не очень чистый) обходной путь:
- в свойствах проекта в разделе [Отладка] установите флажок [Включить отладку неуправляемого кода];
- во время кода запуска вашего класса Program вставьте следующее (это стиль .NET 2, используйте lambdas на ваше усмотрение):
Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e)
{
if (e.SpecialKey == ConsoleSpecialKey.ControlC)
{
e.Cancel = true; // tell the CLR to keep running
}
else if (e.SpecialKey == ConsoleSpecialKey.ControlBreak)
{
//e.Cancel = true; // "Applications are not allowed to cancel the ....
}
// do whatever you must to inform threads on application exit, etc
}
Хотя это и не очевидно, этот код позволит вам отладить ваш обработчик CTRL-C следующим образом:
- запустить вашу программу под отладчиком (F5);
- убедитесь, что консоль вашей программы имеет фокус;
- нажмите Ctrl + пауза (на моей широте e6500, мне нужно удерживать Ctrl и Fn и F12);
Отладчик спросит вас об этом прерывании, нажмите [Игнорировать], и вы окажетесь в обработчике (убедитесь, что была установлена точка останова)
ЖЕ код будет выполняться, если нажаты ctrl + c, единственное отличие - вы должны установить для e.Cancel значение true.
Как отмечают все остальные, проблема НЕ существует во время выполнения, этот обходной путь предназначен ТОЛЬКО для пошагового выполнения обработчика.