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

标签 c# console .net-4.0

我正在用 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/

最佳答案

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

请注意,它确实在调试器之外工作。

关于c# - 如何在 .NET 4 中使用 Console.CancelKeyPress? (在 .NET 3.5 及以下版本中工作正常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2866171/

相关文章:

c# - 如何通过按删除按钮从 ListView 中删除选定的项目?

asp.net - .NET Framework 4.0 中的 TLS 1.2

c# - 如何将表值参数传递给 .NET Core 中的 Dapper?

c# - 如何将文件写入内存流,压缩其中三个内存流,然后将其放入另一个内存流中?

c++ - wcswidth_l 的 Windows 版本

ruby-on-rails - Rails 控制台 : where are helper and app defined?

c++ - podofo 将不需要的内容写入 stderr

visual-studio-2010 - 忍者.net 4.0

c# - 在 Hangfire 中设置 JWT Bearer Token 授权/认证

c# - 方法在 asp.net 中的页面加载期间触发两次