【发布时间】:2012-11-10 17:41:36
【问题描述】:
我想从控制台读取多行用户输入,但也允许使用 CTRL-C 等转义序列终止输入。我的问题是在按下转义序列时取消对 ReadLine() 的最后一次调用。我尝试过多线程并强制线程关闭,但我的问题是获取用户输入的最后一行。当按下转义序列时,最后一行丢失了,我无法使用主线程中的 ReadLine() 将其取回。如果我输入这样的内容:
Input
Input2 [CTRL-C],
我只得到“输入\n”。有没有办法获取多行输入,但在按下转义序列时捕获最后一行?
【问题讨论】:
-
您是否为 CTRL+C 定义了console control handler?否则,将执行默认处理程序,调用 ExitProcess()。
-
我做到了。另外,我没有设置使用 Ctrl+C,任何转义序列都可以。
-
我想您可以在 CTRL+C 处理程序中使用带有 KeyAvailable 和 ReadKey 的循环来获取尚未读取的内容。 ReadLine 将不起作用,因为用户永远不会有机会结束该行......或者您可以尝试一些非常时髦的事情,比如从 CTRL+C 处理程序中接管标准输入并写一行结束。 (我没有尝试过,也不知道它是否会起作用。)
-
我尝试使用 KeyAvailable/ReadKey 循环,它运行良好。感谢您的帮助。
-
酷;我只是猜测没有任何编码,但如果它有效,我会将上述建议添加为实际答案......