只要CancelKeyPress事件未被觸發,保持控制檯應用程序打開的最佳方式是什麼?如何在啓動CancelKeyPress事件之前保持控制檯處於打開狀態?
我寧願不使用Console.Read或Console.ReadLine,因爲我不想接受輸入。我只想讓底層應用程序在觸發時將其打印到控制檯事件詳細信息中。然後,一旦CancelKeyPress事件被觸發,我想正常關閉應用程序。
只要CancelKeyPress事件未被觸發,保持控制檯應用程序打開的最佳方式是什麼?如何在啓動CancelKeyPress事件之前保持控制檯處於打開狀態?
我寧願不使用Console.Read或Console.ReadLine,因爲我不想接受輸入。我只想讓底層應用程序在觸發時將其打印到控制檯事件詳細信息中。然後,一旦CancelKeyPress事件被觸發,我想正常關閉應用程序。
我假設「正常關閉應用程序」是你在這裏奮鬥的一部分。否則,你的應用程序會自動退出ctrl-c。你應該改變標題。
下面是我認爲你需要的一個快速演示。可以通過使用鎖定和監視器進行通知來進一步細化。我不知道你需要什麼了,所以我就提出這個...
class Program
{
private static bool _s_stop = false;
public static void Main(string[] args)
{
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
while (!_s_stop)
{
/* put real logic here */
Console.WriteLine("still running at {0}", DateTime.Now);
Thread.Sleep(3000);
}
Console.WriteLine("Graceful shut down code here...");
//don't leave this... demonstration purposes only...
Console.ReadLine();
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
//you have 2 options here, leave e.Cancel set to false and just handle any
//graceful shutdown that you can while in here, or set a flag to notify the other
//thread at the next check that it's to shut down. I'll do the 2nd option
e.Cancel = true;
_s_stop = true;
Console.WriteLine("CancelKeyPress fired...");
}
}
我更期待什麼是保持最佳方式打開一個控制檯而不詢問輸入。我處理CancelKeyPress事件以正常關閉。 Thread.Sleep似乎是最好的方式來做到這一點。 – 2008-10-15 00:53:17
已經有一個綁定到CancelKeyPress的處理程序終止你的應用程序,掛鉤它的唯一原因是如果你想攔截事件並阻止應用程序關閉。
在您的情況下,只需將您的應用放入無限循環,並讓內置事件處理程序將其殺死。您可能需要考慮使用諸如Wait(1)或後臺進程之類的東西來防止它在無所事事的情況下使用大量的CPU。
的_s_stop
布爾應聲明示例代碼揮發,或過於雄心勃勃的優化可能會導致程序無限循環。
簡單地運行你的程序或代碼而不用調試,在你的鍵盤上鍵入CTRL + f5而不是F5(調試)。
我假設「優雅地關閉應用程序」是您在這裏掙扎的部分。否則,你的應用程序會自動退出ctrl-c。你應該改變標題。 – TheSoftwareJedi 2008-10-15 00:11:19
不,我遇到的問題是「只要CancelKeyPress事件未被解僱就保持控制檯應用程序打開的最佳方式」作爲問題狀態:) – 2008-10-15 04:25:36