我在这里有点新...并且学习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
}
}
我找到了timer.change来自MSDN文章..但我不知道如何在我的情况下实现它
我已经尝试过Thread.sleep()..但是如果可能的话我也在寻找替代方案.. 任何建议都会有帮助
答案 0 :(得分:1)
我认为Artyom Kharlamov是对的,如果您提供有关您打算实现的具体功能的更多详细信息,则有更好的机会获得更接近您需要的答案。
我对你目前所呈现的内容的看法:
也许这并不是你想要做的事情,但除非你对你的期望有所了解,否则很难有效地解决这些问题。
答案 1 :(得分:0)
您不需要任何对象来获取当前时间。只需使用:
private void FirstSlotOperations(object e)
{
DateTime current = DateTime.Now;
}
在回调函数中作为参数传递的对象是timer对象,因此您无法从中获取数据。例如,您只能使用它来操作计时器对象。
private void FirstSlotOperations(object e)
{
Timer t = e as Timer;
t.Change(1000, 0);
}