在winform中使用quartz框架,如何反馈执行的结果到界面上来?使执行的结果能够在界面上显示,是否执行成功等

解决方案 »

  1.   

    定义一个全局的委托..然后在job里就可以调用了.
      

  2.   

    定义委托到job 中使用委托改变界面的值.
      

  3.   

    我也在处理这个问题。把委托事件卸载job的Execute,事件总是null报错。
      

  4.   

    有例程吗? @diaodiaop 
      

  5.   

    public delegate void Write(string msg);
    然后在form1里定义如下
    public static Write MyWrite;
            void Write(object msg)
            {
                richTextBox1.BeginInvoke(new Action(() =>
                {
                    richTextBox1.Text += msg.ToString() + "\n";
                }));
            }
    并且在窗体加载的时候 执行一下
    MyWrite = Write;
    这个时候 就算定义好了..然后 你在
    public void Execute(Quartz.IJobExecutionContext context)
    {
     Write("啊啊啊啊啊")
    }
    就行了
      

  6.   

    public delegate void Write(string msg);
    然后在form1里定义如下
    public static Write MyWrite;
            void Write(object msg)
            {
                richTextBox1.BeginInvoke(new Action(() =>
                {
                    richTextBox1.Text += msg.ToString() + "\n";
                }));
            }
    并且在窗体加载的时候 执行一下
    MyWrite = Write;
    这个时候 就算定义好了..然后 你在
    public void Execute(Quartz.IJobExecutionContext context)
    {
     Write("啊啊啊啊啊")
    }
    就行了
    提示 错误
    Delegate Write是 "类型", 但此处被当作 "变量" 使用!
      

  7.   


     提示 错误
    Delegate Write是 "类型", 但此处被当作 "变量" 使用!
      

  8.   

    有AddListerner啊
      

  9.   

    @starfd  @diaodiaop  有例程吗? 不会弄呀
      

  10.   

    IScheduler scheduler;
    scheduler.ListenerManager.AddJobListener
    scheduler.ListenerManager.AddTriggerListener
    scheduler.ListenerManager.AddSchedulerListener
      

  11.   

    终于搞定了namespace Quartz
    {
        public delegate void Write(string msg);
        
        class ControlQueue
        {
            public bool update = false;
            public int job_times = 0;
            public Write myWrite;        public void Display()
            {
                myWrite("job execute : "+ job_times.ToString() +" times\n");
            }
        }
    }namespace Quartz
    {    public class LoopControl
        {
            public bool loop;
        }    class ControlJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                ControlQueue cq = (ControlQueue)context.JobDetail.JobDataMap.Get("ControlQueue");
                LoopControl loop = null;                     // 任务循环变量
                loop = (LoopControl)context.JobDetail.JobDataMap.Get("loopControlJob");            while (loop.loop)
                {
                    if (cq.update)
                    {
                        cq.job_times++;
                        Thread.Sleep(10);
                        cq.update = false;
                    }
                    else
                        Thread.Sleep(100);
                }
            }
        }
    }namespace Quartz
    {
      
        
        public partial class Form1 : Form
        {
            private ControlQueue cq;
            private IScheduler sched;
            private LoopControl loopControlJob;        void DisplayJobtimes(string msg)
            {
                textBox1.BeginInvoke(new Action(() =>
                {
                    textBox1.AppendText(msg.ToString());
                }));
            }
            
           
            public Form1()
            {
                InitializeComponent();            loopControlJob = new LoopControl();
                loopControlJob.loop = true;            cq = new ControlQueue();
                cq.myWrite = DisplayJobtimes;
                ISchedulerFactory sf = new StdSchedulerFactory();
                sched = sf.GetScheduler();
                sched.Start();
                IJobDetail job = JobBuilder.Create<ControlJob>().WithIdentity("ControlJob", "Test").StoreDurably().Build();
                job.JobDataMap.Put("ControlQueue", cq);
                job.JobDataMap.Put("loopControlJob", loopControlJob);            ITrigger trigger = TriggerBuilder.Create().WithIdentity("ControlTrigger", "Test").StartNow().Build();            sched.ScheduleJob(job, trigger);        }        private void button1_Click(object sender, EventArgs e)
            {
                timer1.Enabled = true;
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                cq.update = true;
                cq.Display();
            }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                loopControlJob.loop = false;
                sched.Shutdown();
            }        private void button2_Click(object sender, EventArgs e)
            {
                timer1.Enabled = false;
            }    }
    }