c# – 如何在.NET 4中使用Console.CancelKeyPress? (在.NET 3.5及更低版本中可以正常工作)

我正在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;
        }
    }
}

如果我将目标框架更改为.NET 3.5,它可以正常工作.

编辑:看来这个人看到同样的问题:
http://johnwheatley.wordpress.com/2010/04/14/net-4-control-c-event-handler-broken/

解决方法

这是 Microsoft Connect的一个已知问题.

请注意,它在调试器之外工作.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...