0

我正在构建一个 .NET 4.0 控制台应用程序,该应用程序不断(即通常每隔几秒钟)向控制台输出信息。这是一个多线程应用程序,不同的线程在不同的时间写入控制台。

问题是我想在这一切发生时接受用户输入。用户输入可以随时发生。

我尝试了两种不同的方法,但都不是很好。

  1. 我尝试使用单独的线程通过查找来阅读Console.KeyAvailable。这“有效”但确实令人困惑,因为在您尝试输入时正在将字符串写入输出。这使光标在打字时四处移动并且迷失方向。

  2. 我尝试使用Console.SetCursorPosition将控制台分成两个“窗格”。上输出,下输入。Console.Clear()这也有效,但我每次绘制屏幕后都必须打电话。这非常慢,并导致疯狂的屏幕闪烁。

似乎我唯一的其他选择是编写一个 Windows 窗体应用程序或 WPF 应用程序来模拟控制台。这似乎很荒谬,因为我唯一想做的就是接受自发的用户输入。

我的 google-fu 没有找到任何有效的控制台替代品或任何构建了模拟控制台的 .NET 应用程序的人......

我被困在这里了吗?

4

2 回答 2

1

这是可能的,但很难。这不是我建议尝试的东西。您必须创建一个TextWriter您设置的自定义 ( Console.SetOut)。这TextWriter会在控制台窗口底部留下一两行供您编写。您最终不得不自己滚动窗口,自己定位光标等。您还必须担心换行和所有这些腐烂。真是……让人抓狂。

如果您想使用它,您需要对Console API有深入的了解,以及它的 .NET 包装器。几年前,我发布了一个 .NET 包装器。你可以用那个包装器来做这一切。您可以从http://mischel.com/pubs/consoledotnet.zip下载包装器

我写了三篇关于它的文章,其中两篇仍然可用。看

http://www.devsource.com/c/a/Using-VS/Working-with-Console-Screen-Buffers-in-NET/

http://www.devsource.com/c/a/Using-VS/Console-Input-in-NET/

于 2012-04-13T23:41:38.520 回答
0

有 2 个控制台窗口怎么样?一个用于输入,另一个用于输出。您可以使用 WinApi 创建控制台窗口。

于 2012-04-13T21:50:16.237 回答