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; } } } }