c#console在循环运行时存储类型文本?

时间:2016-05-21 18:17:32

标签: c#

好的,所以在我的c#控制台应用程序中,它开始有点类似于这个

static void Main()
{
    OpenLoginForm();
}

OpenLoginForm()
{
    while(true)
    {
        //This breaks when user has logged in
    }
}

用户尝试在控制台中输入的任何内容都不会输出到控制台UNTIL OpenLoginForm()已停止运行,问题是,当OpenLoginForm() STOPS运行用户尝试键入的任何文本时进入控制台BEFORE OpenLoginForm()停止运行后输出到控制台AFTER OpenLoginForm()已停止运行,即使OpenLoginForm()正在运行文本DID NOT输出到控制台。我需要它,所以即使用户在OpenLoginForm()运行时键入控制台,用户尝试输入的文本也不会输出,即使OpenLoginForm()停止运行。

这是一个gif,显示我在OpenLoginForm()运行时输入控制台,但是你可以看到OpenLoginForm()何时停止运行我试图输入的文本然后输出即使这就是我我试图阻止。 enter image description here

希望我以某种方式来理解这个问题,我是c#的新手(我相信你可以告诉)。

2 个答案:

答案 0 :(得分:2)

问题是这里的所有内容都在同一个线程上运行,因此当控制台窗口打开时,控制台中不会显示任何内容。但是,控制台输入缓冲区仍然充满了击键。

您应该能够通过清除输入缓冲区来解决这个问题,如in this question所述。它基于使用Console.ReadKey(true),它(有点反直觉)导致 not 的输入键出现在控制台窗口中(false将允许出现)。然后你就把输入扔掉了。

以下是Console.ReadKey(bool)上的MSDN文章。

答案 1 :(得分:1)

这是线程的问题。基本上,控制台的输入缓冲区是活动的,输出被禁用。当您关闭时,控制台的输出缓冲区将打开,输入缓冲区将刷新到输出缓冲区。 最简单的解决方案是使用多个线程。将运行控制台的主线程和将运行登录框的子线程。同样作为孩子,如果控制台关闭,它将关闭孩子