【问题标题】:How to add timer in windows service如何在windows服务中添加定时器
【发布时间】:2014-08-29 10:38:40
【问题描述】:

我有一种情况,我应该通过 Windows 服务和 Timer 来解决。这里是描述。我有一个 winform,用户可以在其中添加他想要报告的时间。他将添加什么时间保存到数据库中。现在这意味着多个用户,所以在数据库中会有多个相同的添加。现在根据我的要求,我必须在他设置的特定时间向用户发送报告。我必须设置我的计时器,这样每当数据库中的适当时间到来时,报告都应该发送给用户。在此之后,它应该再去一次并发送它等等。 为此,我正在使用 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 MySql.Data.MySqlClient;

namespace AutomailTrigger
{
public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    public void OnDebug()
    {

        OnStart(null);
    }


    protected override void OnStart(string[] args)
    {

        string time;

        string conn = "Server=localhost;Port=3306;Database=;UID=root;Pwd=;pooling=false";
        string Query = "SELECT * FROM `reportsetting` order by SendingTime desc limit 1;";
        MySqlConnection con = new MySqlConnection(conn);
        MySqlCommand comm = new MySqlCommand(Query, con);
        con.Open();
        MySqlDataReader dr = comm.ExecuteReader();
        while (dr.Read())
        {
            time = dr["time"].ToString();
        }

        this.timer = new System.Timers.Timer();

        // Hook up the Elapsed event for the timer.
        this.timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        this.timer.Enabled = true;


    }


    private void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        // Your code when the timer elapses

    }

    protected override void OnStop()
    {
    }
}
}

现在我有一个疑问,如何在其中添加计时器以保持循环移动.. 请帮忙,因为这对我来说是合乎逻辑的障碍..

【问题讨论】:

    标签: c# timer windows-services


    【解决方案1】:

    您可以创建一个计时器,如下所示,它从数据库中收集计时器经过的时间,就像您说它来自数据库一样,只要时间过去,您就可以执行您的流程:-

    var timer = new System.Timers.Timer("(Take time from database or use static time)");
    
    // Hook up the Elapsed event for the timer.
    timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    
    timer.Enabled = true;
    ...
    
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
          // Your code when the timer elapses
    }
    

    更新:-

         /// <summary>
            /// Your Timer.
            /// </summary>
            private System.Timers.Timer timer;
    
      protected override void OnStart(string[] args)
        {
            this.timer = new System.Timers.Timer("(Take time from database or use static time)");
    
            // Hook up the Elapsed event for the timer.
            this.timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    
            this.timer.Enabled = true;
    
    
            string conn = "Server=localhost;Port=3306;Database=;UID=root;Pwd=;pooling=false";
            string Query = "SELECT * FROM `reportsetting` order by SendingTime desc limit 1;";
            MySqlConnection con = new MySqlConnection(conn);
            MySqlCommand comm = new MySqlCommand(Query, con);
            con.Open();
            MySqlDataReader dr = comm.ExecuteReader();
            while (dr.Read())
            {
    
            }
        }
    
        protected override void OnStop()
        {
        }
    
        private void OnTimedEvent(object source, ElapsedEventArgs e)
        {
              // Your code when the timer elapses
        }
    

    【讨论】:

    • 我是否需要将timer 与系统时间进行比较才能触发该过程,否则它会自动发生。我应该在哪里添加前三行代码..在 windowsservice Onstart() 方法中?
    • 请注意,您也需要保持服务处于活动状态
    • @ErnodeWeerd 不需要,除非你在谈论System.Threading.Timer
    • @SriramSakthivel - 你确定计时器让服务保持活力吗?你能参考一些相关的文件吗?我很好奇
    • @ErnodeWeerd 你的意思是说计时器应该在后台正常工作或者我让你错了
    猜你喜欢
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2011-12-24
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多