使用<;调用C#ReadKey崩溃控制台应用程序时;努尔
所以我决定开始用C#编程,我做的一件事就是创建一个“pausec.exe”(pause.exe克隆)。它可以工作,但如果像这样称呼它:使用<;调用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
< 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);