如何在循环等待另一个时间结果时让定时器继续运行?

我的代码中有以下问题,我在定时器上运行这个循环(这只是在大定时器上运行的循环的一小部分),

在那个大计时器内(他每1秒打一次)我有1个方法需要等待5秒然后继续其余的循环代码,但我希望它不会卡住代码并且计时器将继续每1秒运行一次并且不会等待那些5秒。

我做了什么我添加一个新的计时器(timer_deva),每隔5秒打勾并完成其中的所有检查,然后计时器停止。

所以我的问题是我需要等待5秒来检索一个值来完成我的代码,但我需要我的主计时器将继续同时运行,当他得到他的结果时,他将需要完成他离开的代码背后。

提前致谢,

else if (mobID.Equals(Convert.ToInt32(txtDeva))) { //START CHECK WITH TIMER timer_deva.Start(); //Methods inside timer_deva update the winnerNation //END CHECK TIMER - GET RESULT winner(zoneId, winnerNation, humansKills, orcKills); } 

TL;博士

常规计时器不用于游戏中。 游戏有一种非常不同的机制来处理它们的逻辑和时间。

长版:

我知道这可能不会直接回答你的问题,但是很多文字都会扼杀评论。 你的定时器听起来非常复杂和层次分明。 从您的变量名称我将假设您正在编写游戏。 游戏通常不会与定时器一起使用,也不会以您期望的方式运行。 这种不同类似游戏的行为可以帮助您解决计时器问题,甚至可以帮助您更好地完成您的设计。

游戏通常具有称为game loop东西。 一般来说,它是循环中一个接一个地调用的三个主要函数:

 while(running) { HandleUserInput(); ChangeWorld(); Render(); } 

您可以获得用户输入,相应地更改游戏世界并将其绘制到屏幕上。 现在,计算机越快,此循环运行得越快。 这对图形有好处(想想FPS),但对游戏不利。 想象一下俄罗斯方块,块的每一帧都移动。 现在我不想买更快的电脑,游戏会变得更加困难。

因此,为了保持游戏速度不变,与计算机的功率无关,循环会考虑时间的流逝:

 while(running) { var timePassedSinceLastLoop = CalculateTimeDelta(); HandleUserInput(); ChangeWorld(timePassedSinceLastLoop); Render(); } 

现在想象一下游戏中某事的冷却时间。 玩家按下了“a”,发生了一些很酷的动作,虽然他可能再次按下“a”,但接下来的5秒钟什么都不会发生。 但游戏仍在运行,并且可能会发生所有其他可能发生的事情。 这不是传统的计时器。 它是一个变量,让我们称之为ActionCooldown ,一旦玩家触发动作,它就会设置为5秒。 每当世界发生变化时,从该数字中减去timePassed直到它为零。 游戏一直在运行并处理输入和渲染。 但只有一旦ActionCooldown达到零,另一次按下“a”将再次触发该动作。