Console.WriteLine("You have not installed Microsoft SQL Server 2008 R2, do you want to install it now? (Y/N): ");
//var answerKey = Console.ReadKey();
//var answer = answerKey.Key;
var answer = Console.ReadLine();
Console.WriteLine("After key pressed.");
Console.WriteLine("Before checking the pressed key.");
//if(answer == ConsoleKey.N || answer != ConsoleKey.Y)
if (string.IsNullOrEmpty(answer) || string.IsNullOrEmpty(answer.Trim()) || string.Compare(answer.Trim(), "N", true) == 0)
{
Console.WriteLine("The installation can not proceed.");
Console.Read();
return;
}
我试图输入这些:
我检查了其他类似的帖子,但没有一个能解决我的问题。 ReadLine()仍会跳过第一个输入字符。
更新已解决,see below。
答案 0 :(得分:1)
建议更改:
Console.Write("Enter some text: ");
String response = Console.ReadLine();
Console.WriteLine("You entered: " + response + ".");
关键点:
1)字符串可能是最容易处理的控制台输入类型
2)控制台输入是面向行的 - 您必须在输入可用于程序之前键入“Enter”。
答案 1 :(得分:1)
谢谢大家回复我的帖子。
不考虑我的代码中的多线程功能,这是我的不好。我会尝试解释我的错误,以便对你的所有回复说声谢谢。
BackgroundWorker worker = .....;
public static void Main(string[] args)
{
InitWorker();
Console.Read();
}
public static void InitWorker()
{
....
worker.RunWorkerAsync();
}
static void worker_DoWork(....)
{
.....this is where I wrote the code...
}
问题是我启动了一个与主机线程异步运行的子线程。当子线程运行到这一行时:var answer = Console.ReadLine(); 主机线程运行到Console.Read();同时。 所以发生的事情看起来我输入了一个var answer = Console.ReadLine();的字符,但它实际上是在主机线程上运行的Console.Read()然后它转了用于ReadLine()的子线程。当子线程从键盘获得输入时,主机线程已经获取了第一个输入字符,然后整个程序完成并关闭。
我希望我的解释清楚。
答案 2 :(得分:0)
基本上你需要更改Console.Read - >到Console.ReadLine