保持控制台窗口打开

时间:2014-03-14 19:20:12

标签: c# console-application

这就是我现在打开控制台窗口的方式:

private static void Main(string[] args)
{
    // Timers run here

    while(true)
    {
        Console.Read();
    }
}

但它总是回到我身边:必须有更好的方法。 Console.Read()处于永恒while的原因是因为我不想让我的程序终止,如果我错误地按enter而它正在运行而我#&# 39; m专注于它的窗口。

有什么想法吗?

不回答我的问题的相关问题:

3 个答案:

答案 0 :(得分:4)

我假设您想在后台运行任务,因此您应该启动一个线程,如下所示:

private static void Main(string[] args)
{
    new Thread(new ThreadStart(SomeThreadFunction)).Start();

    while(true)
    {
        Console.Read();
    }
}

static void SomeThreadFunction()
{
  while(true) {
    Console.WriteLine("Tick");
    Thread.Sleep(1000);
  }
}

答案 1 :(得分:4)

鉴于到目前为止评论中的讨论,我的第一个建议肯定是为此创建一个System Tray application。这将允许用户交互和通知,而无需在桌面上保留控制台窗口。

如果失败了,你可以在控制台中实现类似“游戏循环”的东西。统计数据需要“实时”吗?可能会延迟一秒?像这样:

while (true)
{
    Thread.Sleep(1000);
    DisplayCurrentStats();
}

这会暂停主线程(不总是推荐,但是 你试图在这里保持打开的UI),然后每秒输出一次显示。 (如果输出已由其他内容处理,并且由于任何原因不应在此处移动,请忽略该部分。)

你可能仍然希望某些方式突破整个事情。也许是逃避输入:

while (true)
{
    Thread.Sleep(1000);
    DisplayCurrentStats();
    var escape = Console.Read();
    if (IsEscapeCharacter(escape))
        break;
}
OutputGoodByeMessage();

IsEscapeCharacter()方法中,您可以检查从控制台读取的字符(如果有的话)是否与预期的“转义”字符匹配。 (esc键似乎是一个标准选择,但为了模糊,你可以使用其他任何东西来试图防止“意外逃脱”。)这将允许你在需要时干净地终止应用程序。

它仍然以1秒的延迟增量,这是不理想的。虽然即使只有1/10秒,它仍然会花费大部分时间休眠(即,消耗计算资源),同时提供一些体面的UI响应(抱怨大约1/10秒)延迟):

Thread.Sleep(100);

答案 2 :(得分:1)

  

我不希望我的程序终止,如果我误按了回车

你想要一些与此相似的东西:

while (Console.ReadKey(true).Key == ConsoleKey.Enter)
{
    Console.Read();
}

如果按ENTER键,上面的代码不会退出,但是当你按任意一个键时它会退出。