Win服务中的计时器不会调用已过去的事件

时间:2015-12-07 15:29:05

标签: c# timer

我正在编写Windows服务,在定义的时间段之后调用方法(现在是20秒)。一切都很好,直到没有。似乎无法找到问题的原因。 服务似乎开始和停止正确地给出日志条目,但似乎它不会调用已经过去的事件。

ul

有人能指出我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

我将try catch移到了timer1_tick方法。 这是异常检查的正确位置。

你可以抛出一个异常o timer1_tick和平代码。 您有connectionStrings个部分?

  

注意:我更喜欢使用StartStop方法而不是Enabled = true   和Enabled = false。   有两种方法是正确的。

试试这个:

public partial class UssPwdSyncService : ServiceBase
{
    private Timer timer1 = null; 
    public UssPwdSyncService()
    {
        InitializeComponent();

        this.timer1 = new Timer();
        this.timer1.Interval = 20000;
        this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_tick);
    }
    protected override void OnStart(string[] args)
    {
        this.timer1.Start();
        LogHandling.WriteErrorLogs("Service has started! LOg!");
    }
    private void timer1_tick(object sender, ElapsedEventArgs e)
    {
        try
        {
            ConfigurationManager.RefreshSection("connectionStrings");
            foreach (ConnectionStringSettings cStr in ConfigurationManager.ConnectionStrings)
            {
                string name = cStr.Name;
                string connString = cStr.ConnectionString;
                string provider = cStr.ProviderName;

                LogHandling.WriteErrorLogs(name + " " + connString + " " + provider);
            }
            LogHandling.WriteErrorLogs("This does something!");
        }
        catch (Exception ex)
        {
            LogHandling.WriteErrorLogs(ex);
        }
    }
    protected override void OnStop()
    {
        this.timer1.Stop();
        LogHandling.WriteErrorLogs("Service has stoped!");
    }
}

答案 1 :(得分:0)

我假设您在System.Timers中使用了计时器。您需要调用计时器Start()方法。