C# 在x秒后停止循环线程方法
我正在创建一个控制台游戏,简单到“我生成一个随机数,找到它”,但有很多选项 我当前的代码(这里没有我想要的)可以在GitHub上找到: 我想要的是创建一个我的游戏版本,它将被计时,这样计算机生成数字,用户找到它,它生成一个新的数字,玩家有90秒的时间来找到最多的随机数字。我可以很容易地编写代码 我需要的帮助是在90秒后停止游戏(一个线程),并从该线程中检索找到的答案数。控制台标题也应显示剩余时间。我尝试过的尝试是有效的,但是如果console请求数字输入(C# 在x秒后停止循环线程方法,c#,multithreading,C#,Multithreading,我正在创建一个控制台游戏,简单到“我生成一个随机数,找到它”,但有很多选项 我当前的代码(这里没有我想要的)可以在GitHub上找到: 我想要的是创建一个我的游戏版本,它将被计时,这样计算机生成数字,用户找到它,它生成一个新的数字,玩家有90秒的时间来找到最多的随机数字。我可以很容易地编写代码 我需要的帮助是在90秒后停止游戏(一个线程),并从该线程中检索找到的答案数。控制台标题也应显示剩余时间。我尝试过的尝试是有效的,但是如果console请求数字输入(console.ReadLine()),
console.ReadLine()
),线程不会中断。但计时器是用于整个过程的,而不仅仅是用户输入
private static void timerb()
{
int t = 90;
for (int i = 0; i < 90; i++)
{
Console.Title = t + " seconds remaining";
Thread.Sleep(1000);
t--;
}
}
private static void cGame()
{
Thread t = new Thread(timerb);
t.Start();
while (t.IsAlive)
{
bool good = false;
int rnd = new Random().Next(0,10); // 0 and 10 are sample
while (!good)
{
try
{
Console.Write("Enter a number between x and y >");
int i = int.Parse(Console.ReadLine());
if (i == rnd)
{
good = true;
}
}
catch (FormatException)
{
Console.WriteLine("Invalid answer.");
}
}
}
}
private static void timerb()
{
int t=90;
对于(int i=0;i<90;i++)
{
Console.Title=t+“剩余秒数”;
睡眠(1000);
t--;
}
}
私有静态void cGame()
{
线程t=新线程(timerb);
t、 Start();
while(t.IsAlive)
{
bool good=false;
int rnd=new Random()。下一步(0,10);//0和10是示例
而(!好)
{
尝试
{
Console.Write(“输入x和y之间的数字>”;
int i=int.Parse(Console.ReadLine());
如果(i==rnd)
{
好=真;
}
}
捕获(格式化异常)
{
Console.WriteLine(“无效答案”);
}
}
}
}
我对穿线知之甚少,在这一点上我被卡住了。
有人能帮我解决我的问题吗?我正在使用.NET 2.0。也许你在找计时器?您可以注册一个事件,该事件将在90秒后触发,该事件将在循环发生时运行。可以在以下位置找到文档: 我相信这个用法是:
Timer timer = new Timer { Interval = new Timespan (0,1,30);
timer.elapsed += //function to fire to kill the app or the game
这就解决了这个问题
然后,当主游戏循环结束时,您需要一种方法来通知timerb线程关闭。我认为最简单的方法是结束游戏循环,当剩余的时间可能与我读过的主题相同时,实际上这里的超时只针对用户输入,而不是所有的过程、验证等。这就是你的问题所在。您自己说过:但如果console请求数字输入(console.ReadLine()),线程不会中断。使用答案中的信息来解决问题。提示:您需要保存开始日期/时间,并对照当前日期/时间进行检查。循环和睡眠一秒钟并不能保证你会以精确的一秒钟间隔醒来,并在零时间内执行循环代码。对于日期/时间来说,这很好,但这并不能解决我的问题。我会研究它,谢谢大家。如果成功的话,我会告诉你。