[英]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.