C#反射動態調用dll中的方法及使用QuartZ.net實現作業調度


using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace QuartZ
{
    class Program
    {
        static void Main(string[] args)
        {

            //加載程序集(dll文件地址),使用Assembly類   
            Assembly assembly = Assembly.LoadFile(@"D:\ConsoleSample\QuartZ\ClassLib\bin\Debug\ClassLib.dll");

            //獲取類型,參數(名稱空間+類)   
            Type type = assembly.GetType("ClassLib.Sample");

            //創建該對象的實例,object類型,參數(名稱空間+類)   
            object instance = assembly.CreateInstance("ClassLib.Sample");

            //設置Show_Str方法中的參數類型,Type[]類型;如有多個參數可以追加多個   
            Type[] params_type = new Type[1];
            params_type[0] = Type.GetType("System.String");
            //設置Show_Str方法中的參數值;如有多個參數可以追加多個   
            Object[] params_obj = new Object[1];
            params_obj[0] = "你好";

            //執行Show_Str方法   
            object value = type.GetMethod("Show_Str", params_type).Invoke(instance, params_obj);
            Console.WriteLine(value);
            
            //Nuget下載QuartZ
            Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            //首先創建一個作業調度池
            ISchedulerFactory schedf = new StdSchedulerFactory();
            IScheduler sched = schedf.GetScheduler();
            //創建出來一個具體的作業
            IJobDetail job = JobBuilder.Create<JobDemo>().Build();
            //NextGivenSecondDate:如果第一個參數為null 第二個參數則表明當前時間往后推遲2秒的時間點。
            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
            DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddHours(2), 3);
            //創建並配置一個觸發器 
            //每三秒執行一次,一共執行100次,開始執行時間設定在當前時間,
            //結束時間我設定在2小時后;超過兩小時不管有沒有執行100次,都不執行了。             
            
            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime)
                                        .WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(100))
                                        .Build();
            //加入作業調度池中
            sched.ScheduleJob(job, trigger);
            //開始運行
            sched.Start();
            Console.ReadKey();
        }
    }

    public class JobDemo : IJob
    {
        /// <summary>
        /// 這里是作業調度每次定時執行方法
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLib
{
    class Sample
    {
        public string Show_Str(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return "無數據";
            }
            else
            {
                return "你傳入的參數是:" + str;
            }
        }  
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM