簡體   English   中英

保持控制台窗口打開

[英]Keep console window open

這就是我現在打開控制台窗口的方法:

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

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

但它總是回到我身邊:必須有更好的方法。 之所以說Console.Read()是永恆的while就是因為我不希望我的程序終止,如果錯誤地我按下enter ,而它的運行,我專注的窗口。

有任何想法嗎?

相關問題沒有回答我的問題:

我假設您想在后台運行任務,因此您應該只啟動一個線程,如下所示:

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);
  }
}

鑒於到目前為止在評論中的討論,我的第一個建議肯定是為此創建一個系統托盤應用程序 這將允許用戶交互和通知,而無需在桌面上保留控制台窗口。

如果做不到這一點,你可以在控制台中實現類似“游戲循環”的東西。 統計數據需要“實時”嗎? 可能會延遲一秒? 像這樣的東西:

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);

如果我錯誤地輸入,我不希望我的程序終止

你想要一些與此類似的東西:

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

如果按ENTER鍵,上面的代碼不會退出,但是當你按任意一個鍵時它會退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM