保持控制台可见的Console.ReadLine()替代方法

5

有没有更好的语句(或方法)来保持控制台不消失,而不是使用hackish Console.ReadLine()调用。是否有更能表达保持控制台可见性目的、更正交的内容?


4
你希望什么时候它停止可见? - Ani
为什么控制台在程序没有调用关闭命令时会关闭?假设我的程序中唯一的语句是Console.WriteLine("Hello world"); 现在你期望这个应用程序的正常执行会是什么样子? - explorer
所有的.NET应用程序都从主方法开始括号({)开始,当光标到达结束括号(})时结束。因此,在到达结束括号之前必须停止光标的移动。为了实现这一点,最简单的方法是等待客户端输入一个键。另一种方法是,在成功构建解决方案后,通过命令提示符运行它;这样命令提示符就不会自动关闭。 - bahadir arslan
Bedir'e 意思是之前。很抱歉,有时这个拼写控制会变得疯狂。 - bahadir arslan
5个回答

9

如果您仍在开发应用程序,可以通过 Ctrl + F5(无调试)运行 否则,您可以使用 Console.ReadKey() (相同但没有更多选项)


5
你可以做以下事情:
Console.ReadKey();

Console.ReadLine()不是一种hackish的方法,它会暂停屏幕等待输入。输入可以是单个键或字符串。

更新

ReadKey()方法的一个好处是它“等待,也就是在发出ReadKey方法的线程上阻塞,直到按下字符或功能键。” MSDN

这与读取字符串的ReadLine不同。可以说更加清晰明了。


1
我几乎可以确定,楼主对这个解决方案的满意程度将与他之前提到的权宜之计一样高。 - Kirk Woll
@jsmith,我不明白你为什么认为对于这个问题来说ReadKey()比ReadLine()更有优势。你说的"Which for console you're always waiting for an input."是什么意思? - Kirk Woll
@jsmith,嗯...你认为OP遇到的问题是他不喜欢“Line”这个词吗?(否则,“语法”是相同的) - Kirk Woll
@Kirk Woll,你对这个问题的看法过于主观了,而我的回答是有充分理由的。从原帖中可以看到:“难道没有更好的语句吗?”“更能表达出来”的意思。这两句话让我认为他正在寻找更能描述这个行为的东西。当你暂停屏幕时,你不是在读一行文字,而是在读一个键。通常是空格键或回车键。 - jsmith
@jsmith,你应该考虑冷静下来。想想看:刚才你声称你的解决方案没有任何优势,现在又说它“外观更好”、“表达更充分”。 - Kirk Woll
显示剩余2条评论

2

这要看情况而定。如果您要运行命令行、通过代码进行调试,然后能够在控制台上查看结果,则有两个选项:

  1. 如果您使用已附加调试器(f5)运行,则必须使用Console.ReadLine。
  2. 如果您在未附加调试器的情况下(ctrl+f5)运行,则它将保持打开状态……但是显然您无法进行调试。

我不确定为什么这是默认行为,但它就是这样的 :-)


0

这取决于我正在做什么。如果我正在进行多线程工作,并希望我的控制台应用程序保持活动状态,直到所有其他工作完成,我通常会像这样做。(类似于MasterMastic)

using System;
using System.Threading;

namespace Test_Console
{
    class Program
    {
        static EventWaitHandle EWHandle;

        static void Main(string[] args)
        {
            EWHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
            Thread WorkThread = new Thread(new ThreadStart(DoStuff));
            EWHandle.WaitOne();
        }

        static void DoStuff()
        {
            Console.WriteLine("Do what you want here");

            EWHandle.Set();
        }
    }
}

当然,如果你想要的是这样的话,总是可以使用常规的断点和其他调试工具。


0

我通常使用其中之一:

Console.ReadKey(true); //You might want to put this in an infinite loop
new AutoResetEvent(false).WaitOne();

在VS中,您还可以运行(Ctrl + F5)程序(与调试运行不同),它将在执行完成后添加系统暂停。
我会说WaitOne和仅运行(而不是调试)程序是您的非hackish选项。
如果您确实想要调试,也许可以在最后一个}处设置断点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接