Console.ReadLine()的替代方案,以使控制台可见

时间:2010-09-27 18:02:16

标签: c#

是不是有一个更好看的语句(或方式)来防止控制台消失而不是hackish Console.ReadLine()调用。是什么东西更能表达目的,更正交,保持控制台可见?

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

你可以这样做:

Console.ReadKey();

Console.ReadLine()并不是真正的hackish,你暂停屏幕等待输入。输入可以是单个键,也可以是字符串。

<强>更新

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

这与收集字符串的ReadLine不同。可以说,更清洁。

答案 2 :(得分:2)

这取决于具体情况。如果您正在讨论运行命令行,调试代码,然后能够在控制台上查看结果,您有两个选择:

  1. 如果运行附加的调试器(f5),则必须使用Console.ReadLine
  2. 如果你在没有连接调试器的情况下运行(ctrl + f5),它将保持打开状态......但是你显然无法通过调试。
  3. 我不确定为什么这是默认行为,但它是: - )

答案 3 :(得分:0)

我通常使用其中一种:

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

在VS中您还可以运行( Ctrl + F5 )程序(区别于在调试中运行),它将在完成执行后添加系统暂停。

我会说WaitOne,只是运行(并且没有调试)该程序是你的非hackish选项。

如果想要调试,可能会在最后}设置一个断点。

答案 4 :(得分: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();
        }
    }
}

当然,如果这就是你想要的,那么总是只使用常规断点和其他调试工具。