2
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;
}

我试图输入这些:

  • y -> 它给了我一个空字符串,
  • y(whitespace+y) -> 它给了我“y”

我检查了其他类似的帖子,但没有一个能解决我的问题。ReadLine() 仍然跳过第一个输入字符。

更新已解决,见下文

4

3 回答 3

1

建议更改:

Console.Write("Enter some text: ");
String response = Console.ReadLine();
Console.WriteLine("You entered: " + response + ".");

关键点:

1) 字符串可能是最容易处理的控制台输入类型

2) 控制台输入是面向行的——您必须在输入对程序可用之前键入“Enter”。

于 2013-05-01T05:17:06.140 回答
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(),然后轮到 sub-线程到 ReadLine()。当子线程从键盘得到输入时,第一个输入的字符已经被主线程取走,然后整个程序结束并关闭。

我希望我的解释清楚。

于 2013-05-01T06:31:52.387 回答
0

基本上你需要改变 Console.Read --> Console.ReadLine

于 2013-05-01T05:17:00.517 回答