C# 计时器未在处理
我创建了一个windows服务来运行一段代码,并在其中实现了计时器来定期运行它 我的计时器类是:C# 计时器未在处理,c#,timer,windows-services,C#,Timer,Windows Services,我创建了一个windows服务来运行一段代码,并在其中实现了计时器来定期运行它 我的计时器类是: class TimerClass { private static System.Timers.Timer aTimer; public static void Main() { aTimer = new System.Timers.Timer(1000); aTimer.Elapsed += new ElapsedEventHandle
class TimerClass
{
private static System.Timers.Timer aTimer;
public static void Main()
{
aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 5000;
aTimer.Enabled = true;
GC.KeepAlive(aTimer);
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Stop();
DatabaseUpdation dbUp = new DatabaseUpdation();
File.AppendAllText(@"C:\Documents and Settings\New Folder\My Documents\demo\abc.txt", "Start" + " " + DateTime.Now.ToString() + Environment.NewLine);
dbUp.GetDatafromSource();
aTimer.Start();
}
}
我从Start方法调用它:
protected override void OnStart(string[] args)
{
TimerClass timer = new TimerClass();
}
但计时器根本没有执行。
有人能帮我找到这个错误吗?
提前谢谢你忘了启动计时器。把它移到你的过去之外。仅当计时器过期时才调用Elapse
aTimer.Start();
仅供参考,一旦调用启动方法,您不需要启用计时器。请阅读
您的初始化代码不应位于publicstaticvoidmain中,而应位于publicstimerclass中
此外,您的方法和计时器不应是静态的。您需要调用Main方法来启动计时器:
protected override void OnStart(string[] args)
{
TimerClass.Main();
}
顺便说一句,这个名字不太好——我想像Start这样的名字会更好。另外,我希望这不是你的应用程序入口点方法。试试这个:
class TimerClass
{
private static System.Timers.Timer aTimer;
public static void Main()
{
aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 5000;
GC.KeepAlive(aTimer);
}
public static void Start()
{
aTimer.Start();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Stop();
DatabaseUpdation dbUp = new DatabaseUpdation();
File.AppendAllText(@"C:\Documents and Settings\New Folder\My Documents\demo\abc.txt", "Start" + " " + DateTime.Now.ToString() + Environment.NewLine);
dbUp.GetDatafromSource();
aTimer.Start();
}
}
你需要这样称呼它:
protected override void OnStart(string[] args)
{
//TimerClass timer = new TimerClass();<==No need it's static class!!!
TimerClass.Main();
TimerClass.Start();
}
为什么在你的TimerClass里有一个静态的空白主界面?您在代码中的何处调用方法Main?否,这相当于Enabled=true。timer.Enabled=true相当于timer.start正在使用已用方法重新启动计时器。应该是完全合法的。@Sebastian Krysmanski,@Raphaël Althaus,太酷了。我也在使用计时器,通常我使用enable=true并调用start方法。因此,如果我启用计时器,则无需正确启动它?@jobertenano Correct。在内部,Timer.Start just executes Enabled=true。在OnStart中有什么需要更改的吗?您确定吗?1.您有5秒的时间暂停计时器。2.如果此代码计时器引发异常,您将不会收到通知。是的,我现在就可以运行了,谢谢
protected override void OnStart(string[] args)
{
//TimerClass timer = new TimerClass();<==No need it's static class!!!
TimerClass.Main();
TimerClass.Start();
}