我正在C#4中编写一个控制台应用程序,并且想要优雅地取消我的程序并按下Ctrl + C。下面的代码我以前使用过很多次,但现在当试图在.NET 4中使用它时,似乎发生了一个奇怪的未处理的异常。如何在.NET 4中使用Console.CancelKeyPress? (在.NET 3.5及更低版本中正常工作)
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;
}
}
}
如果我将目标框架更改为.NET 3.5,它将起作用。
编辑:看来此人看到了同样的问题: http://johnwheatley.wordpress.com/2010/04/14/net-4-control-c-event-handler-broken/
什么是例外?它发生在哪里?您可以在VS中的“例外”对话框中调试各种异常(调试 - >例外或Ctrl + Alt + E)。 – 2010-05-19 14:03:54
它不是一个正常的例外。我添加的链接中的人员将其描述为“程序错误”。以下是我在VS 2010中运行.NET 4时按Ctrl + C时所看到的屏幕截图:http://img227.imageshack.us/img227/5871/consoletest.jpg – BigJoe714 2010-05-19 14:07:47
只是猜测,但你可能会通过禁用托管进程可以解决此问题:右键单击项目,选择属性,转到调试选项卡,然后取消选中“启用Visual Studio托管过程”。 – 2010-05-19 14:10:37