AS.NETタイマー(System.Timers.Timer)-サーバ端編

14360 ワード

Timer–タイマーまたはタイマーは、JavaScriptのsetIntervalと似ているところが多く、与えられた時間の後に一定の操作をします.
構造関数Timer()はTimer類の新しい例を初期化し,すべての属性を初期値に設定した.TimerはTimerクラスの新しい例を初期化し、Interval属性を指定のミリ秒数に設定する.
主なプロパティAutoResetは、TimerがElapstedイベント(false)または繰り返しを引き起こすべきかどうかを示すブール値を取得または設定する.Enbredは、TimerがElapstedイベントを引き起こすべきかどうかを示す値を取得または設定する.IntervalはElapstedイベントを引き起こす間隔を取得または設定します(ミリ秒単位).
主な方法Start()はEvaledをtrueに設定することによりElapspedイベントを開始します.
イベントはElapsedが間隔に達した時に発生します.Dispossedは、リリースコンポーネントを呼び出した時にDisppose方法が発生します.(Componentから引き継ぎます.)
一つの栗:配置ファイルを作って、配置ファイルによってAPPの開始時にタイマーを作成して、私達の方法を実行させます.
Timerプロファイル(XML)

<Timer>
  <AutoReset>1AutoReset>
  <Enabled>1Enabled>
  <Interval>10000Interval>
  <Start>1Start>
  <Suspend>1Suspend>
Timer>
プロファイルクラスの読み込み
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;

namespace WebApplication1
{
    public class ConfigureXML
    {
        public static TimerModel GetValueByCode(string xmlUrl)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(xmlUrl);
            if (doc == null)
            {
                return null;
            }
            XmlNode timerNode = doc.SelectSingleNode("Timer");
            if (timerNode == null)
            {
                return null;
            }

            TimerModel timerModel = new TimerModel();
            try
            {
                timerModel.AutoReset = timerNode.SelectSingleNode("AutoReset").InnerText.Equals("1") ? true : false;
            }
            catch
            {
                timerModel.AutoReset = true;
            }
            try
            {
                timerModel.Enabled = timerNode.SelectSingleNode("Enabled").InnerText.Equals("1") ? true : false;
            }
            catch
            {
                timerModel.Enabled = true;
            }
            try
            {
                timerModel.Interval = Convert.ToDouble("0" + timerNode.SelectSingleNode("Interval").InnerText);
            }
            catch
            {
                timerModel.Interval = 60000d;
            }
            try
            {
                timerModel.Start = timerNode.SelectSingleNode("Start").InnerText.Equals("1") ? true : false;
            }
            catch
            {
                timerModel.Start = false;
            }
            try
            {
                timerModel.Suspend = timerNode.SelectSingleNode("Suspend").InnerText.Equals("1") ? true : false;
            }
            catch
            {
                timerModel.Suspend = true;
            }
            return timerModel;
        }

    }
}
カスタムTimerモデル
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1
{
    public class TimerModel
    {
        /// 
        ///         ,     System.Timers.Timer                 System.Timers.Timer.Elapsed  ,                    。
        /// 
        public bool AutoReset { get; set; }

        /// 
        ///         ,     System.Timers.Timer       System.Timers.Timer.Elapsed   。
        /// 
        public bool Enabled { get; set; }

        /// 
        ///         System.Timers.Timer.Elapsed      
        /// 
        public double Interval { get; set; }

        /// 
        ///        
        /// 
        public bool Start { get; set; }

        /// 
        ///        
        /// 
        public bool Suspend { get; set; }
    }
}

定时器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Timers;

namespace WebApplication1
{
    public class TimerJob
    {
        string timerXmlUrl = @"C:\Users\Administrator\Documents\Visual Studio 2013\Projects\Test20180607\WebApplication1\TimerConfig.xml";

        public TimerJob()
        { }

        public void Start()
        {
            TimerModel timerModel = ConfigureXML.GetValueByCode(timerXmlUrl);
            if (timerModel != null && timerModel.Start)
            {
                Timer timer = timer = new Timer(timerModel.Interval);
                timer.AutoReset = timerModel.AutoReset;
                timer.Enabled = timerModel.Enabled;
                timer.Elapsed += new ElapsedEventHandler(OnElapsedEvent);
                timer.Start();
            }
        }

        /// 
        /// Timer Elapsed       
        /// 
        /// 
        /// 
        private void OnElapsedEvent(Object sender, ElapsedEventArgs e)
        {
            //                 ,    _._
            TimerModel timerModel = ConfigureXML.GetValueByCode(timerXmlUrl);
            //          
            if (timerModel != null && !timerModel.Suspend)
            {
                Test test = new Test();
                test.GUID = DateTime.Now.ToString();
                DB_TestEntities db = new DB_TestEntities();
                db.Test.Add(test);
                db.SaveChanges();
            }
        }
    }
}

定时器入口(就是启动定时器的地方):Global

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace WebApplication1
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            TimerJob job = new TimerJob();
            job.Start();
        }

        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void Application_End(object sender, EventArgs e)
        {

        }
    }
}
このように、簡単なタイマーが出てきます.プロファイルのパラメータを変更することで、タイマーのオン/無効、一時停止/継続を制御できます.各パラメータはどういう意味ですか?Timerモデルを参照してください.
もちろん、このように直接配置ファイルを変更するのも不便です.ページを作って、コードの中で配置ファイルのパラメータを修正します.コードが分からない人に任せて、メンテナンスします.