C#簡単なタイミングタスクを実現

3605 ワード

シーン1:微博、微信、メールなどのタイミングで送信する必要がある場合、どうすればいいですか?
シーン2:友达は明日诞生日を过ごして、私は今日先にメールを书いて、定刻は明日何时何分何秒に送って、どのようにしますか?
以上の問題に基づいて、私達は自分で1つの小さいタイマーを実現して、今分解して、WinForm、Webなどのプログラムの中でまず1つの類TaskTimeを建てて、継承することができます.NetのシステムTimers.Timer,パラメータ付き構造関数TaskTimeを再構築し,以下のようにする.
(完全なソースコードは後でダウンロードできます)
public class TaskTime : System.Timers.Timer
    {
        /// 
        ///   
        /// 
        ///         
        ///        ,      ,string[]   ,        
        ///         , action      
        ///         
        ///        ,              
        public TaskTime(DateTime executeTime, Action action,string[] actionArgs, Action callback, string[] callbackArgs)
        {
            double interval = (executeTime - DateTime.Now).TotalMilliseconds;
            //      ,       
            if (interval >= int.MaxValue)
            {
                throw new ArgumentOutOfRangeException("       24 !");
            }
            base.Elapsed += (obj, e) => action(actionArgs);
            base.Elapsed += (obj, e) => callback(callbackArgs);
            base.AutoReset = false; //TODO:         
            base.Interval = interval > 0 && interval < int.MaxValue ? interval : 100;
            base.Enabled = true;
        }
    }

呼び出し:
ここでテストはメインプログラムで行い、手間を省くために簡単なプレゼンテーションをします.
必要な関数とパラメータの定義
実行するタスクの関数を定義します.
/// 
        ///       
        /// 
        ///            ,                    
        private static void ActionTask(string[] strarr)
        {
            int taskId = 0;
            if (strarr.Length>0)
            {
                int.TryParse(strarr[0],out taskId);
            }
            try
            {
                //    
                Console.WriteLine("   :" + taskId);
            }
            catch (Exception)
            {
                throw;
            }
        }

実行されたコールバック関数をもう1つ定義します.
/// 
        ///          
        /// 
        ///           ,    
        private static void CallBackFun(string[] strarr)
        {
            int taskId = 0;
            if (strarr.Length > 0)
            {
                int.TryParse(strarr[0], out taskId);
            }
            try
            {
                //    
                Console.WriteLine("      ,         :" + taskId);
            }
            catch (Exception)
            {
                throw;
            }
        }

この2つの関数のパラメータを定義すればいいです.同じページにあります.
string[] strArr = new string[] {"11","22","33","44","55" };
string[] strArr2 = new string[] { "66", "77", "88", "99" };

メインプログラムではこのようにコンストラクション関数に直接パラメータを書き込むだけでよい.
static void Main(string[] args)
        {
            string[] strArr = new string[] {"11","22","33","44","55" };
            string[] strArr2 = new string[] { "66", "77", "88", "99" };
            TaskTime t = new TaskTime(DateTime.Now.AddSeconds(5), ActionTask, strArr, CallBackFun, strArr2);
            Console.ReadKey();
            return;
        }

そのうち、DateTime.Now.AddSeconds(5)は、5秒後にタスクを実行し、完全なソースコードは後でダウンロードできます.
クリックしてソースをダウンロード