zoukankan      html  css  js  c++  java
  • 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;
                }
            }  
        }
    }
  • 相关阅读:
    使用部分函数时并未include其所在头文件,但是能编译成功且能运行,为什么?
    ubuntu开发机所需工具,做个记录,不断补充
    c cpp编程用到的系统边角与其拾遗
    几个递进的make file
    可以用命令行控制eclipse断点增加删除、远程调试创建与启动的插件
    Mac 从睡眠恢复后没有声音的问题
    [netty4][netty-handler]netty之idle handler处理
    《将博客搬至CSDN》
    python2与python3中__metacalss__的不同用法
    python3 type和object的关系
  • 原文地址:https://www.cnblogs.com/smartsmile/p/7666190.html
Copyright © 2011-2022 走看看