使用<;调用C#ReadKey崩溃控制台应用程序时;努尔

使用<;调用C#ReadKey崩溃控制台应用程序时;努尔,c#,crash,console,nul,C#,Crash,Console,Nul,所以我决定开始用C#编程,我做的一件事就是创建一个“pausec.exe”(pause.exe克隆)。它可以工作,但如果像这样称呼它: < nul pausec 这是我正在运行的代码: using System; namespace pausec { class Program { static void Main(string[] args) { Console.Write("Press any key to

所以我决定开始用C#编程,我做的一件事就是创建一个“pausec.exe”(pause.exe克隆)。它可以工作,但如果像这样称呼它:

< nul pausec  
这是我正在运行的代码:

using System;

namespace pausec
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
            Console.Write("\n");
        }
    }
}
我想知道是否有解决方法,甚至可以在使用
时忽略
ReadKey

感谢您的帮助。
提前谢谢

UPDATE:找到了一种方法,通过删除截取()然后添加
Console.Write(“\b\b”)
在使用
ReadKey
方法之后,它就可以工作了。奇怪的是,当我将应用程序复制到桌面时,它不会等待用户输入,而是自动关闭

更新2:它现在工作正常。谢谢大家的回答

//
/// <summary>
/// Written by fredrik92 (http://social.msdn.microsoft.com/Forums/vstudio/en-US/08163199-0a5d-4057-8aa9-3a0a013800c7/how-to-write-a-command-like-pause-to-console?forum=csharpgeneral)
/// Writes a message to the console prompting the user to press a certain key in order to exit the current program.
/// This procedure intercepts all keys that are pressed, so that nothing is displayed in the Console. By default the
/// Enter key is used as the key that has to be pressed.
/// </summary>
/// <param name="key">The key that the Console will wait for. If this parameter is omitted the Enter key is used.</param>    
public static void WriteKeyPressForExit(ConsoleKey key = ConsoleKey.Enter)
{
    Console.WriteLine();
    Console.WriteLine("Press the {0} key on your keyboard to exit . . .", key);
    while (Console.ReadKey(intercept: true).Key != key) { }
}
///弗雷德里克写的92(http://social.msdn.microsoft.com/Forums/vstudio/en-US/08163199-0a5d-4057-8aa9-3a0a013800c7/how-to-write-a-command-like-pause-to-console?forum=csharpgeneral) ///向控制台写入一条消息,提示用户按某个键退出当前程序。 ///此过程截取所有按下的键,以便控制台中不显示任何内容。默认情况下 ///回车键用作必须按下的键。 /// ///控制台将等待的密钥。如果省略此参数,则使用Enter键。 public static void WriteKeyPressForExit(ConsoleKey=ConsoleKey.Enter) { Console.WriteLine(); WriteLine(“按键盘上的{0}键退出…”,键); while(Console.ReadKey(intercept:true).Key!=Key){} }
控制台有一种方法,您可以检查stdin是否已重定向

public static bool IsInputRedirected { get; }

您的程序抛出该异常,因为使用
Console.ReadKey(true),如中所述:

如果intercept参数为true,则截取并删除按下的键 控制台窗口中不显示;否则,按下的键将被禁用 显示

您没有阅读或“听”键盘上按下的任何键,也没有可以截取和不显示在控制台窗口中的键

如果只想按任意键关闭程序,请使用:

Console.ReadKey(); //this won't intercept any key pressed

更新:您在评论中询问如何隐藏用户按下的键。这段代码应该做到以下几点:

ConsoleKeyInfo cki;
Console.Write("Press any key to continue . . . ");
cki = Console.ReadKey(true);

我也面临同样的错误

所以我只检查了我的项目输出类型。

项目名称->右键单击->属性

在那里您可以看到您的输出类型


所以我将其改为控制台应用程序,因为在我的例子中,它以前似乎是windows应用程序。然后它就可以正常工作。

它允许您选择希望他们按的键,而不是任何键,但您可以轻松地将其修改为任何键。无法识别部落知识。你能解释一下什么是
pause.exe
吗?@P.Brian.Mackey pause.exe是一个cmd命令,它显示“按任意键继续…”消息,等待你这样做,然后继续执行代码。这很有效,但唯一的问题是我在寻找隐藏按下的键的方法。如果没有办法,我也更新了我的问题。我也会尝试您的方法,但我找到了一种使用Console.Write(“\b\b”)命令的方法。编辑:您的方法似乎解决了奇怪的“按enter键,第一个字母被删除”问题。(编辑超时)我尝试使用@ALTOhDude,我用我的控制台应用程序测试了代码。什么是“@ALTOhDude”你想这么做吗?啊…但只在CLR的v4.5中。该属性在早期版本的CLR中不存在:解决了调试windows服务项目时出现的问题。
Console.ReadLine();
ConsoleKeyInfo cki;
Console.Write("Press any key to continue . . . ");
cki = Console.ReadKey(true);