控制台暂停的方式

问题描述 投票:0回答:6

由于我是 C# 新手,我在 Google 上搜索了我以前在 C++ 中使用的各种内容。其中之一是控制台应用程序中的暂停可能性。

很多人提出了不同的方法,比如

System.Console.ReadKey(true);
System.Console.WriteLine();

其他人甚至展示了自制的功能,“应该”比其他功能更有效。 决定哪一个是更好的解决方案确实令人头疼。

谁能举例说明 C# 如何解释它们以及哪种方式最有效?

c# console
6个回答
8
投票

使用以下任一方法运行程序:

  1. ctrl + F5

或者按照拉杰什的建议

  1. Console.ReadKey() //pauses for any key

  2. Console.ReadLine() //pauses for enter key


2
投票

我通常使用

do
while
来暂停控制台。然后,如有必要,如果您按特定键,控制台应该恢复。

示例

do
{

/*  while (!Console.KeyAvailable) //Continue if pressing a Key press is not available in the input stream
    {
        //Do Something While Paused
    } 
*/

} while (Console.ReadKey(true).Key != ConsoleKey.Escape); //Resume if Escape was pressed

如果将其保留为

//Do Something While Paused
,只有在暂停时按下 Esc 键而不执行任何操作,控制台才会恢复。

但是,如果您不希望控制台应用程序恢复,则可以使用

while (true);
而不是
while (Console.ReadKey(true).Key != ConsoleKey.Escape);

示例

do
{
    //break; //Resume
} while (true); //Continue while True (Always True)

注意:控制台应用程序将暂停,因为通过执行

do { } while (Condition);
,您只是告诉控制台应用程序您正在做某事。因此,控制台应用程序将等待操作执行。然后,无事可做时通常会关闭。
注意
while
用于循环。因此,除非条件变为 false,否则应用程序不会关闭。

谢谢,
我希望你觉得这有帮助:)


1
投票

如果您正在谈论内置的“暂停”命令,您始终可以调用它 - 尽管它很丑陋。 这是我使用的:

static void Pause()
{
    Console.WriteLine();
    var pauseProc = Process.Start(
        new ProcessStartInfo()
            {
                FileName = "cmd",
                Arguments = "/C pause",
                UseShellExecute = false
            });
    pauseProc.WaitForExit();
}

通常是这样的:

if (Environment.UserInteractive())
    Pause();

希望这有帮助。


1
投票

或者你可以使用帕特所做的,但对于参数而不是

Arguments = "/C pause"

你可以使用

Arguments = "/C TIMEOUT /t 4 /nobreak > NUL"

其中数字 4 是控制台在执行程序其余部分之前暂停的秒数。

整个功能将是

static void Pause(int sec)
    {
        Console.WriteLine();
        var pauseProc = Process.Start(
            new ProcessStartInfo()
            {
                FileName = "cmd",
                Arguments = "/C TIMEOUT /t " + sec + " /nobreak > NUL",
                UseShellExecute = false
            });
        pauseProc.WaitForExit();
    }

您将使用暂停功能调用它并指定暂停的秒数。

Pause(4);

希望有帮助。


0
投票

如果有人想要与

Press any key to continue . . .

相同的外观和感觉,请将其放在那里

这个很简单,没有任何 DLL 导入:

private static void Pause() {
    Console.Write("Press any key to continue . . . ");
    // ReadKey(Boolean) = true to not display the pressed key
    // https://learn.microsoft.com/en-us/dotnet/api/system.console.readkey
    Console.ReadKey(true);
}

或者,如果您真的想要老式风格(仅限 Windows):

using System.Runtime.InteropServices;

class Whatever {

    [DllImport("msvcrt.dll")]
    // "system" has to be lowercase
    static extern bool system(string str);

    static void Main(string[] args) {
        system("pause");
    }

}

注意:

ReadKey()
DllImport("msvcrt.dll")
本身都不响应按下修饰键(Alt、Ctrl 或 Shift)。所以你最好只使用
ReadKey()


-2
投票

你可以写“Console.ReadLine();”这也是为了目的。

© www.soinside.com 2019 - 2024. All rights reserved.