[英]end the for loop by keyboard input C#
時鍾將自動運行myclock。勾選並在控制台上顯示。 而且我想在按空格鍵時重置時鍾。
但是,按空格鍵似乎無法結束循環。
那么,如何通過按鍵輸入重置時鍾?
這是因為console.readkey
正確的Program.cs:
public static void Main(string[] args)
{
Clock myclock = new Clock();
while (true)
{
Console.WriteLine("Press 'spacebar' to view the time and 'r' to reset the time");
if (Console.ReadKey().Key == ConsoleKey.Spacebar)
{
for (int i = 0; i < 86400;i++)
{
myclock.displayTime();
Thread.Sleep(1000);
myclock.Update();
if (Console.KeyAvailable)
{
ConsoleKeyInfo cki = Console.ReadKey(true);
if (cki.Key == ConsoleKey.R)
{
myclock.ClockReset();
Console.WriteLine("\nClock has been reset");
break;
}
}
}
}
}
也許您還需要一些補充:
問題在於您的內部for循環會阻止do-while循環。 在for循環完成之前,不會檢查do-while的條件。
嘗試使用一種方法來檢查時鍾增量循環內的鍵輸入。
編輯:我不能說是否如其他答案中所述對按鍵進行簡單檢查會有所幫助。 我猜想這將需要程序在處理for循環時立即檢測按鍵。 當您至少一秒鍾不按空格鍵時,這樣做的可能性就很小。
合適的方式可以是將時鍾的增量放入另一個不會阻塞輸入線程的線程/任務中。
編輯2:另外,您還應該注意示例中顯示的時間會延遲一秒鍾,因為您首先增加時間值,然后等待一秒鍾,然后才顯示增加的時間。 如果您采用這種方式,則應考慮這樣做:
myclock.Tick();
myclock.displayTime();
// Increment and display first, then put thread to sleep
Thread.Sleep(1000);
或者,如果您想從零開始:
myclock.displayTime();
Thread.Sleep(1000);
myclock.Tick();
嘗試使用Console.KeyAvailable,如下面的示例所示。 在您的情況下,請處理if語句中的出口:
while( true )
{
if( Console.KeyAvailable ) // since .NET 2.0
{
char c = Console.ReadKey().KeyChar ;
Console.Write( c );
}
}
您將需要偵聽按鍵事件,然后進行處理,例如為循環設置一個標志以進行檢查。
摘自: 試圖檢測按鍵
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyCode == Keys.F1 && e.Alt)
{
//do something
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.