[英]reset the timer on second call
我在这里有点新手,而且正在学习Threading.Timer ...我在Window Service中有一个计时器,它在16:48:00触发一个函数。我只想在21:00:00 PM再次触发该计时器...然后22:00:00 ...时隙之间没有固定计时器间隔
这是我尝试过的我的代码:
public partial class ASMSService1 : ServiceBase
{
private Timer myTimer;
private DateTime inputDate;
private DateTime yesterday;
private DateTime today;
public ASMSService1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
inputDate = DateTime.Today;
today = DateTime.Today;
yesterday = today.AddDays(-1);
//time is Set here
SetTimer(16, 48, 00);
}
private void SetTimer(int hours, int minutes, int seconds)
{
inputDate = DateTime.Today.AddHours(hours).AddMinutes(minutes).AddSeconds(seconds);
String date1 = inputDate.TimeOfDay.ToString();
if (DateTime.Now > inputDate)
{
inputDate = inputDate.AddDays(1);
}
if (date1.CompareTo("16:48:00") == 0)
{
myTimer = new System.Threading.Timer(new TimerCallback(FirstSlotOperations));
myTimer.Change((int)(inputDate - DateTime.Now).TotalMilliseconds, Timeout.Infinite);
}
}
private void FirstSlotOperations(object e)
{
//some operation
//Need to reset the Timer at 21:00:00
}
}
我从MSDN文章中找到了timer.change。但是我不确定如何在我的情况下实现它
我已经尝试过Thread.sleep()..但是我也在寻找其他可能的办法..任何建议都会有所帮助
我认为Artyom Kharlamov是正确的,如果您提供有关要实现的特定功能的更多详细信息,则有更好的机会获得更接近您所需的答案。
我对您目前介绍的内容的看法:
也许这并不是您真正想做的,但是除非您对自己的期望有更多的了解,否则很难有效地解决它们。
您不需要任何对象即可获取当前时间。 只需使用:
private void FirstSlotOperations(object e)
{
DateTime current = DateTime.Now;
}
在回调函数中作为参数传递的对象是计时器对象,因此您无法从中获取数据。 例如,您只能将其用于对计时器对象进行操作。
private void FirstSlotOperations(object e)
{
Timer t = e as Timer;
t.Change(1000, 0);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.