【发布时间】:2010-05-19 14:02:00
【问题描述】:
我正在用 C# 4 编写一个控制台应用程序,并且想要优雅地取消我的程序并按下 Ctrl + C。以下代码我以前用过很多次,但现在尝试在 .NET 4 中使用它时,似乎发生了一个奇怪的未处理异常。
namespace ConsoleTest
{
class Program
{
private static bool stop = false;
static void Main(string[] args)
{
System.Console.TreatControlCAsInput = false;
System.Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
while (!stop)
{
System.Console.WriteLine("waiting...");
System.Threading.Thread.Sleep(1000);
}
System.Console.WriteLine("Press any key to exit...");
System.Console.ReadKey(true);
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
stop = true;
e.Cancel = true;
}
}
}
如果我将 Target Framework 更改为 .NET 3.5,它可以工作。
编辑: 这个人似乎遇到了同样的问题: http://johnwheatley.wordpress.com/2010/04/14/net-4-control-c-event-handler-broken/
【问题讨论】:
-
有什么异常?它发生在哪里?您可以在 VS 的“异常”对话框中启用对各种异常的中断(调试 -> 异常或 Ctrl+Alt+E)。
-
这不是一个正常的例外。我添加的链接中的人将其描述为“程序错误”。下面是当目标框架是在 VS 2010 中运行的 .NET 4 时按 Ctrl+C 时看到的屏幕截图:img227.imageshack.us/img227/5871/consoletest.jpg
-
只是一个猜测,但您可以通过禁用托管进程来解决此问题:右键单击您的项目,选择“属性”,转到“调试”选项卡,然后取消选中“启用 Visual Studio托管进程”。