-2

問題があります。作成した API に接続するサービスを作成しようとしています。

このサービスは、1 時間ごとに Mysql のデータベースに接続し、特定の値があるかどうかを確認する必要があります。

たとえば、フィールド x に値 y があるかどうかを毎回確認します。true の場合、何かを実行する必要があります。

私はすでに Threads と System.Threading.Timer についていくつか読んでいますが、よくわかりません。誰かが私が探しているものの実用的な例や正しい方法を教えてもらえますか?

前もって感謝します ..

4

3 に答える 3

7

必要なことを実行する単純なプログラムを作成し、それを 1 時間ごとに実行される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 サービスは 1 日 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 に答える