我需要每隔5秒运行一次功能,持续10分钟。
我使用计时器运行它5秒钟,但如何将计时器限制为仅10分钟?
答案 0 :(得分:13)
只需捕获您想要停止的时间并从已用过的处理程序中结束计时器。这是一个例子(注意:我使用了System.Threading.Timer
timer
。为你正在做的事情选择合适的计时器。例如,如果你在Winforms中写作,你可能会在System.Windows.Forms.Timer
之后。 )
public class MyClass
{
System.Threading.Timer Timer;
System.DateTime StopTime;
public void Run()
{
StopTime = System.DateTime.Now.AddMinutes(10);
Timer = new System.Threading.Timer(TimerCallback, null, 0, 5000);
}
private void TimerCallback(object state)
{
if(System.DateTime.Now >= StopTime)
{
Timer.Dispose();
return;
}
// Do your work...
}
}
答案 1 :(得分:10)
让你的计时器循环如下:
DateTime endTime = DateTime.Now.AddMinutes(10);
while(endTime < DateTime.Now)
{
// Process loop
}
答案 2 :(得分:6)
将Y分钟除以X间隔,以获得需要运行的次数。之后,您只需要计算函数被调用的次数。
在你的情况下,10分钟= 600秒/ 5秒=需要120次通话。只需让计数器跟踪你的函数调用次数。
答案 3 :(得分:3)
Timer.Stop()
。
答案 4 :(得分:3)
只需使用DateTime变量来跟踪它应该结束的时间并在开始之前设置它。在您的Elapsed事件处理程序上,检查信号时间是否小于结束时间。如果不是,请停止计时器。
答案 5 :(得分:3)
您可以计算函数调用的次数,并创建递减计数器,经过一段时间后取消订阅计时器滴答。或者您可以运行另一个具有勾选周期的计时器 - 10分钟,并在勾选时取消订阅计时器勾选调用您的功能。
答案 6 :(得分:2)
注意开始时间。在每次通话中,测试currentTime + 5秒&gt; startTime + 10分钟。如果是,请禁用计时器。
我更倾向于使用这种方法来运行N刻度,因为定时器不能保证在你喜欢它时触发。现有世界时间超过10分钟可能有120个滴答。
答案 7 :(得分:2)
您可以设置两个运行5秒的计时器,另一个计时器运行10分钟并禁用第一个计时器
答案 8 :(得分:2)
您可以使用第二个计时器:
class Program
{
static void Main(string[] args)
{
int interval = 5 * 1000; //milliseconds
int duration = 10 * 60 * 1000; //milliseconds
intervalTimer = new System.Timers.Timer(interval);
durationTimer = new System.Timers.Timer(duration);
intervalTimer.Elapsed += new System.Timers.ElapsedEventHandler(intervalTimer_Elapsed);
durationTimer.Elapsed += new System.Timers.ElapsedEventHandler(durationTimer_Elapsed);
intervalTimer.Start();
durationTimer.Start();
}
static void durationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
intervalTimer.Stop();
durationTimer.Stop();
}
static void intervalTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//call your method
}
private static System.Timers.Timer intervalTimer;
private static System.Timers.Timer durationTimer;
}