-2

我有一个问题,我正在尝试创建一个服务来连接到我创建的 API。

这个服务每小时都要连接Mysql中的一个数据库,看看有没有一定的值。

例如,每次我都会查看字段 x 是否具有值 y。如果是真的,将不得不运行一些东西。

我已经阅读了一些关于 Threads 和 System.Threading.Timer 的东西,但是不太明白,有人可以给我一个实际的例子或正确的方法吗,我在找什么,好吗?

提前致谢 ..

4

3 回答 3

7

创建一个简单的程序来满足您的需要,并将其作为每小时运行的Windows 任务运行。

于 2013-04-29T09:07:34.340 回答
1

创建一个 Windows 服务并给它一个 1 小时的时间间隔。此 Windows 服务将始终运行,但会在指定的时间间隔触发对数据库的查询。使用 Windows 服务,您不必搞乱线程和所有内容。

partial class YourService : ServiceBase
{
    Timer timer = new Timer();
    ...
    ...


    public YourService()
    { 
        InitializeComponent();
    }

    /// <summary>
    /// 

    protected override void OnStart(string[] args)
    {
        timer.Interval = 1000000; /*The interval of the Windows Service Cycle set this to one hour*/
        timer.Start();
        timer.Enabled = true;
        timer.AutoReset = true;
        timer.Elapsed += new ElapsedEventHandler(OnElapseTime); /*fire the event after each cycle*/
    }

    private void OnElapseTime(object sender, ElapsedEventArgs e)
    {
         // HERE DO UR DATABASE QUERY AND ALL
    }

    ...
    ...
}
于 2013-04-29T09:08:38.737 回答
0

创建一个 Windows 服务并将其移动到您拥有该应用程序的服务器。此 Windows 服务将全天 24 小时运行,并满足您的要求。

类程序:ServiceBase { System.Timers.Timer 计时器;

    static void Main(string[] args)
    {
        ServiceBase.Run(new Program());
    }
    public Program()
    {
        this.ServiceName = "DB Sync";
    }
    protected override void OnStart(string[] args)
    {
        base.OnStart(args);
        InitializeTimer();

    }

    protected override void OnStop()
    {
        base.OnStop();

    }

    protected void InitializeTimer()
    {
        try
        {
            if (timer == null)
            {
                timer = new System.Timers.Timer();
                timer.Enabled = true;
                timer.AutoReset = true;
                timer.Interval = 60000 * 1;
                timer.Enabled = true;
                timer.Elapsed += timer_Elapsed;
            }

        }
        catch (Exception ex)
        {

        }
        finally
        {
        }
    }

    protected void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
    {

        TimerTick();
        timer.Interval = 60000 * Convert.ToDouble(ConfigurationManager.AppSettings["TimerInerval"]);
    }

    private void TimerTick()
    {
        try
        {
           // Query the DB in this place.
        }
        catch (Exception ex)
        {

        }
    }
}
于 2013-04-29T09:14:00.800 回答