Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在x秒后停止循环线程方法_C#_Multithreading - Fatal编程技术网

C# 在x秒后停止循环线程方法

C# 在x秒后停止循环线程方法,c#,multithreading,C#,Multithreading,我正在创建一个控制台游戏,简单到“我生成一个随机数,找到它”,但有很多选项 我当前的代码(这里没有我想要的)可以在GitHub上找到: 我想要的是创建一个我的游戏版本,它将被计时,这样计算机生成数字,用户找到它,它生成一个新的数字,玩家有90秒的时间来找到最多的随机数字。我可以很容易地编写代码 我需要的帮助是在90秒后停止游戏(一个线程),并从该线程中检索找到的答案数。控制台标题也应显示剩余时间。我尝试过的尝试是有效的,但是如果console请求数字输入(console.ReadLine()),

我正在创建一个控制台游戏,简单到“我生成一个随机数,找到它”,但有很多选项

我当前的代码(这里没有我想要的)可以在GitHub上找到:

我想要的是创建一个我的游戏版本,它将被计时,这样计算机生成数字,用户找到它,它生成一个新的数字,玩家有90秒的时间来找到最多的随机数字。我可以很容易地编写代码

我需要的帮助是在90秒后停止游戏(一个线程),并从该线程中检索找到的答案数。控制台标题也应显示剩余时间。我尝试过的尝试是有效的,但是如果console请求数字输入(
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()),线程不会中断。使用答案中的信息来解决问题。提示:您需要保存开始日期/时间,并对照当前日期/时间进行检查。循环和睡眠一秒钟并不能保证你会以精确的一秒钟间隔醒来,并在零时间内执行循环代码。对于日期/时间来说,这很好,但这并不能解决我的问题。我会研究它,谢谢大家。如果成功的话,我会告诉你。