我尝试在X秒后关闭控制台窗口,这是一个例子:
我的程序说"键入一个数字:"
然后我输入" 1945"
在我输入数字后,控制台会说"解锁"。
问题是我希望控制台在3-4秒后重新运行原始消息,这样它就可以在循环中连续执行此操作。
在下面我已经包含了当前代码以及我希望它做我想做的事情的评论。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace portkod
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Kod:");
int kod = Convert.ToInt32(Console.ReadLine());
DateTime tiden = DateTime.Now;
if (kod == 1946)
{
Console.Clear();
//After this message comes up I want the program to ask for "Kod:"
//again after like 3-4 seconds.
Console.WriteLine("Unlocked!");
}
else if (kod != 1946)
{
Console.Clear();
Console.WriteLine("Locked!");
}
Console.ReadLine();
}
}
}
答案 0 :(得分:5)
你可以这样做。
GetIntFromConsole从控制台读取,只有在给出有效整数时才返回nr,如果没有再次询问。
只要用户在1946年没有给出,该程序会在4秒后重复该问题,并标记“已锁定”
using System;
using System.Threading;
namespace Repeat
{
class Program
{
static int GetIntFromConsole(string label)
{
int result;
string input;
do
{
Console.Write("{0}: ", label);
input = Console.ReadLine();
} while (!int.TryParse(input, out result));
return result;
}
static void Main(string[] args)
{
int result;
result = GetIntFromConsole("Kod");
while (result != 1946)
{
Console.WriteLine("Locked");
Thread.Sleep(4000); // 4 seconds = 4000 milliseconds
result = GetIntFromConsole("Kod");
}
Console.WriteLine("Unlocked");
}
}
}
根据要求,我会尝试解释一下
可以从程序内的任何位置调用GetIntFromConsole,并且只返回有效的解析整数,这意味着空字符串,或者除了数字之外的任何其他内容都无法正确解析,并且用户将不得不重试
这里使用的循环是do {this logic} while(条件满足)
这意味着,当您使用do / while循环时,您将始终进入此循环,直到while之后的条件返回false
Main中的while循环首先检查一个条件,如果这个条件为真,它会进入循环,否则它会跳转到Console.WriteLine(" Unlocked")。
如果您想按照以下评论中的说明运行连续循环,可以通过以下方式进行:
static void Main(string[] args)
{
int result;
while (true) // always true, it will always repeat
{
result = GetIntFromConsole("Kod");
while (result != 1946)
{
Console.WriteLine("Locked");
Thread.Sleep(4000); // 4 seconds = 4000 milliseconds
result = GetIntFromConsole("Kod");
}
Console.WriteLine("Unlocked");
Thread.Sleep(4000);
}
}
这个新的while循环将循环,直到您发出break;
语句,因为它会再次从开始重新启动逻辑:result = GetIntFromConsole("Kod");
您的结果将被重新评估,您可以再次锁定/解锁屏幕几次;)
我希望这是一个充分的解释,我不是一个老师。)
答案 1 :(得分:1)
您可以使用Thread.Sleep等待一段时间。
static void Main(string[] args)
{
while (getKod() != 1946)
{
System.Threading.Thread.Sleep(3000);
}
Console.WriteLine("Unlocked");
}
static int getKod()
{
Console.WriteLine("Kod:");
int kod;
Int32.TryParse(Console.ReadLine(), out kod);
return kod;
}