• 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:ConsoleSampleQuartZClassLibinDebugClassLib.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;
                }
            }  
        }
    }
  • 相关阅读:
    Codeforces 451A Game With Sticks
    POJ 3624 Charm Bracelet
    POJ 2127 Greatest Common Increasing Subsequence
    POJ 1458 Common Subsequence
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1698
    HDU 1754
    POJ 1724
    POJ 1201
    CSUOJ 1256
  • 原文地址:https://www.cnblogs.com/smartsmile/p/7666190.html
Copyright © 2020-2023  润新知