计时器不在Windows服务中触发,但在控制台应用程序中触发

时间:2013-11-25 18:06:36

标签: c# .net timer windows-services

我正在尝试在Windows服务中使用计时器,我安装服务并在服务中启动它,但计时器不会触发。但是,当我在控制台应用程序中使用此完全相同的代码时,计时器将触发。 我尝试了很多不同的建议,似乎没有一个在Windows服务中为我工作

这是我的代码......

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.IO;


namespace NextService
{
public partial class Service1 : ServiceBase
{
    private System.Timers.Timer aTimer;

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        aTimer = new System.Timers.Timer(10000);
        aTimer.Elapsed += new ElapsedEventHandler(aTimer_Elapsed);
        aTimer.Enabled = true;
        aTimer.AutoReset = true;
        aTimer.Start();

    }

    private static void aTimer_Elapsed(object sender, ElapsedEventArgs e)
    {
        string path = @"c:\MyTest.txt";
        if (!File.Exists(path))
        {
            // Create a file to write to. 
            using (StreamWriter sw = File.CreateText(path))
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome" + DateTime.Now.ToString());
            }
        }
        //throw new NotImplementedException();
    }

    protected override void OnStop()
    {

    }

}

}

我只是不明白为什么它可以在控制台应用程序中运行而不在此服务中。我只是让它在fire事件上创建一个文件来测试,然后才把我的代码放到它上面。

由于

使用线程计时器更新代码

 protected override void OnStart(string[] args)
    {
        TimerCallback callback = aTimer_Elapsed;
        Timer timer = new Timer(callback);
        timer.Change(TimeSpan.Zero, TimeSpan.FromSeconds(10));
        Thread.Sleep(10000);

    }

    private void aTimer_Elapsed(object state)
    {
        string path = @"c:\MyTest.txt";
        if (!File.Exists(path))
        {
            // Create a file to write to. 
            using (StreamWriter sw = File.CreateText(path))
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome" + DateTime.Now.ToString());
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我不会解释其他已经解释过的内容,请点击链接:

Duplicated question?
Possible Complete Answer