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

C# Console.ReadLine()的替代方法,以保持控制台可见,c#,C#,没有比hackish console.ReadLine()调用更美观的语句(或方法)来防止控制台消失吗。一些更能表达目的、更正交的东西,使控制台可见?您可以: Console.ReadKey(); Console.ReadLine()并不是真正的黑客行为,你暂停屏幕等待输入。输入可以是单个键,也可以是字符串 更新 ReadKey()方法的一个优点是它“等待,即在发出ReadKey方法的线程上阻塞,直到按下字符或函数键。” 这与接收字符串的ReadLine不同。可以说,更干净。这取决于上下文。如

没有比hackish console.ReadLine()调用更美观的语句(或方法)来防止控制台消失吗。一些更能表达目的、更正交的东西,使控制台可见?

您可以:

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

更新

ReadKey()方法的一个优点是它“等待,即在发出ReadKey方法的线程上阻塞,直到按下字符或函数键。”


这与接收字符串的ReadLine不同。可以说,更干净。

这取决于上下文。如果要运行命令行,调试代码,然后在控制台上查看结果,则有两个选项:

  • 如果运行时附加了调试器(f5),则必须使用Console.ReadLine
  • 如果运行时未连接调试器(ctrl+f5),它将保持打开状态。。。但很明显,您无法调试通过

  • 我不知道为什么这是默认行为,但它是:-)

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

    我通常使用以下选项之一:

    Console.ReadKey(true); //You might want to put this in an infinite loop
    new AutoResetEvent(false).WaitOne();
    
    在VS中,您还可以运行(Ctrl+F5)程序(区别于在调试中运行),并在完成执行后添加系统暂停

    我想说,
    WaitOne
    ,仅仅运行(而不是调试)程序是您的非黑客选项


    如果确实要调试,可能在最后一个
    }

    处设置断点取决于我正在执行的操作。如果我在做多线程工作,并且希望我的控制台应用程序在所有其他工作完成之前保持活动状态,我通常会这样做。(与MasterMastic类似)


    当然,如果你想使用常规断点和其他调试工具的话,也可以使用常规断点和其他调试工具

    那么,您希望它什么时候停止可见?为什么在程序没有调用时控制台会关闭?假设我的程序中唯一的语句是Console.WriteLine(“helloworld”);现在,您希望这个应用程序的正常执行是什么样子的??所有.net应用程序都以大括号({)开头的主方法开始,并在光标到达右大括号(})时结束。所以你必须阻止光标移动到右大括号。要实现这一点,最简单的方法就是等待客户的密钥。另一种方法是,在成功构建解决方案后,通过命令提示符运行命令;所以命令提示符不会自动关闭它。Bedir'e的意思是“以前”。很抱歉,有时这种拼写控制会变得疯狂。我几乎可以肯定OP会对这种解决方案感到满意,就像他已经提到的解决方法一样。@jsmith,我不明白为什么您认为ReadKey()在这个问题上比ReadLine()更具优势。你是什么意思,“对于控制台,你总是在等待输入。”?@jsmith,嗯……那么你认为OP的问题是他不喜欢“行”这个词?(否则“语法”是相同的)@Kirk Woll当我有正当理由回答这个问题时,你对这个问题非常固执己见。从OP的“有没有一个更好看的声明”,“一些更能表达的东西”。这两句话让我觉得他在寻找更能描述这一行为的东西。当你暂停屏幕时,你不是在看一行。而是读一把钥匙。通常是空间或输入键。@史密斯,你应该考虑冷静下来。考虑一下:您刚刚声称您的解决方案没有任何优势——现在您说它“更好看”和“更具表现力”。
    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();
            }
        }
    }