首页 > 其他分享 >winfrom quartz 实现任务信息绑定到窗体上

winfrom quartz 实现任务信息绑定到窗体上

时间:2023-03-01 15:03:38浏览次数:42  
标签:quartz Console context winfrom JobDataMap 窗体 WriteLine public JobDetail

一个任务可以绑定 多个触发器但是一个触发器不能绑定多个任务   使用委托实现多线程同步窗体

 public partial class Form1 : Form
    {
        public static Form1 form1;
        public Form1()
        {
            InitializeComponent();
          //  System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            form1 = this;
        }
        public delegate void TextBoxAdd(string Str);
        //在给textBox1.text赋值的地方调用以下方法即可
        public void SetStr(string Str)
        {
            // InvokeRequired需要比较调用线程ID和创建线程ID
            // 如果它们不相同则返回true
            if (this.textBox1.InvokeRequired)
            {
                TextBoxAdd d = new TextBoxAdd(SetStr);
                this.Invoke(d, new object[] { Str });
            }
            else
            {
                textBox1.AppendText(Str + "");
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            StdSchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = factory.GetScheduler().Result;//

            //指定具体做什么事儿,Job 
            IJobDetail job = JobBuilder.Create<SendMessageJob>().Build();
            IJobDetail job1 = JobBuilder.Create<SendMessageJob1>().Build();
            job.JobDataMap.Add("student1", "落羽");
            job.JobDataMap.Add("student2", "赤");
            job.JobDataMap.Add("student3", "自由飞翔");
            job.JobDataMap.Add("student4", "小刘");
            job.JobDataMap.Add("Year", DateTime.Now.Year);

            //指定时间策略
            // ITrigger trigger = TriggerBuilder.Create()
            //.WithCronSchedule
            // .WithSimpleSchedule(build =>
            // {

            //     build.WithIntervalInSeconds(3).RepeatForever(); //设置时间间隔,时分秒  
            //     //                                //.WithMisfireHandlingInstructionFireNow()
            //     //              .WithRepeatCount(4); //设置执行次数,总共执行3+1次,

            //   })
            //.Build();

            ITrigger trigger =
                        TriggerBuilder.Create()
                             .StartAt(DateTime.Now)//什么时候开始执行
                            // .WithIdentity("tname1", "group1")
                             .WithDescription("高级班的QuartZ")  //描述
                             .WithCronSchedule("0/5 * * * * ?")  //从第三秒开始每五秒执行一次
                             .Build();

            ITrigger trigger1 =
                      TriggerBuilder.Create()
                           .StartAt(DateTime.Now)//什么时候开始执行
                          // .WithIdentity("tname12", "group12")
                           .WithDescription("高级班的QuartZ")  //描述
                           .WithCronSchedule("0/6 * * * * ?")  //从第三秒开始每五秒执行一次
                           .Build();


            scheduler.ScheduleJob(job, trigger);
            scheduler.ScheduleJob(job1, trigger1);

            scheduler.Start();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = "";
        }
    }
View Code
 public class SendMessageJob : IJob
    {
        /// <summary>
        /// 这里定义具体要做的事情
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                //Action action = () =>
                //{
                //    Form1.form1.textBox1.AppendText("你好senmesjon"); ;
                //};
                //action.Invoke();
                Form1.form1.SetStr("你好senmesjon");
              


                Console.WriteLine("******************JobDetail.JobDataMap.Get******************");
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student1"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student2"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student3"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student4"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetInt("Year"));
                Console.WriteLine("这是要做的事情"+DateTime.Now);
              
            });
        }
    }
View Code
    public class SendMessageJob1 : IJob
    {
        /// <summary>
        /// 这里定义具体要做的事情
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                //Action action = () =>
                //{
                //    Form1.form1.textBox1.AppendText("你好senmesjon111111"); ;
                //};
                //action.Invoke();
                Form1.form1.SetStr("你好senmesjon111111");

                Console.WriteLine("******************JobDetail.JobDataMap.Get******************");
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student1"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student2"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student3"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetString("student4"));
                Console.WriteLine(context.JobDetail.JobDataMap.GetInt("Year"));
                Console.WriteLine("这是要做的事情"+DateTime.Now);
              
            });
        }
    }
View Code

 

标签:quartz,Console,context,winfrom,JobDataMap,窗体,WriteLine,public,JobDetail
From: https://www.cnblogs.com/FanJunCheng521/p/17168162.html

相关文章

  • QuartZ
    Quartz.NET是一个强大、开源、轻量级的任务调度框架。任务调度在我们的开发中经常遇到,如说:每天晚上三点让程序或网站执行某些代码,或者每隔5秒种执行一个方法等。Windows......
  • 获取Winform窗体或Panel下包含的所有控件、根据控件名称获取指定控件
    一、实现效果在Winform中窗体(Form)就像一个容器,可以包含所有的控件(比如:panel、button、textedit等控件);如果把窗体看做是Winform中最大的容器,那么Panel可以看做第二,Pa......
  • C# Winfrom 快速自适应布局
    实现方式:会将from装进Panel里面对控件进行自动计算。在项目中添加AutoWindowsSize.cs类,内容如下:(优势:不需要在Form1中添加任何布局,直接将类复制到项目中,在form1代码中......
  • 如何在Windows窗体中使用Quartz .net?
    好!我浪费了太多时间来解决这个问题,使Quartz.net在windows窗体上工作。但是,我有一个通用的解决方案,我希望能帮助其他人。像往常一样创建IJOB类创建一个指向表单的静态......
  • Quartz的使用教程
    参考文档1HELLOWORLD程序实现每个五秒自动执行某个任务publicclassProgram{publicstaticvoidMain(){Run();......
  • Quartz与SpringBoot 搞定任务调度
    一、Quartz简介Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百......
  • Quartz.Net 主要概念介绍和吐槽
    我们经常遇到需要定时执行某些任务的情况,比如清理缓存、异步结果轮询等,如果不打算造轮子,那么选择一款合适的定时任务组件就很关键了。所幸,.Net世界中的选项并不多:)选型主......
  • 基于Quartz的定时任务实现
    核心:QuartzScheduler:调度器,所有执行操作由scheduler统一管理Trigger:设置时间,间隔,次数JobDetail:任务的实例Job:任务业务逻辑依赖包<dependency><groupI......
  • C#判断窗体是否打开
     在桌面程序开发会遇到的情况,托盘功能或者是小功能弹窗问题:现有一个主窗体有子窗体 子窗体每个都可以新建其他窗体问题:新建子窗体时怎么判断子窗体是否打开?若子窗体打......
  • C# winform窗体(cs文件) .Designer.cs、.resx 文件分离出来 同级问题(转)
    改csproj文件就可以了, 用记事本打开csproj文件。 <CompileInclude="测试界面\FrmDayTimer.designer.cs"/>改为: <CompileInclude="测试界面\FrmDayTimer.designe......