好的,所以在我的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()
何时停止运行我试图输入的文本然后输出即使这就是我我试图阻止。
希望我以某种方式来理解这个问题,我是c#的新手(我相信你可以告诉)。
答案 0 :(得分:2)
问题是这里的所有内容都在同一个线程上运行,因此当控制台窗口打开时,控制台中不会显示任何内容。但是,控制台输入缓冲区仍然充满了击键。
您应该能够通过清除输入缓冲区来解决这个问题,如in this question所述。它基于使用Console.ReadKey(true),它(有点反直觉)导致 not 的输入键出现在控制台窗口中(false将允许出现)。然后你就把输入扔掉了。
以下是Console.ReadKey(bool)上的MSDN文章。
答案 1 :(得分:1)
这是线程的问题。基本上,控制台的输入缓冲区是活动的,输出被禁用。当您关闭时,控制台的输出缓冲区将打开,输入缓冲区将刷新到输出缓冲区。 最简单的解决方案是使用多个线程。将运行控制台的主线程和将运行登录框的子线程。同样作为孩子,如果控制台关闭,它将关闭孩子