C# 计时器未在处理

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

我创建了一个windows服务来运行一段代码,并在其中实现了计时器来定期运行它

我的计时器类是:

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();
    }