首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quartz.Net触发事件

Quartz.Net触发事件
EN

Stack Overflow用户
提问于 2011-06-07 12:18:57
回答 1查看 2.2K关注 0票数 1

我有自己的ITrigger。基本上,如下所示:

代码语言:javascript
复制
public interface ITrigger : IDisposable
{
    /// <summary>
    /// Occurs when an input has been trigger.
    /// </summary>
    event InputTriggedEventHandler InputTrigged;
    /// <summary>
    /// Starts the trigger.
    /// </summary>
    /// <param name="trigger">The data about the trigger to start.</param>
    void Init(Trigger trigger);
}

这个接口的一个实现是一个FileCreatedTrigger,它在创建文件时触发事件。

我想要另一个实现,在这个实现中,我可以将Trigger设置为在一定的时间间隔内触发(很像Windows )。所以,我看了一下Quartz.Net,这就是我想要的。

问题是,如何从一个IJob**?**激发InputTrigged事件,这正是Quartz所使用的。IJob只实现不能调用父实例的执行(在本例中是ITrigger,因为它不知道这是哪个实例。

希望我说得很清楚。我希望能够在使用Quartz.Net时保留我的接口Quartz.Net,这是另一个如何触发的实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-08 11:45:18

我最后所做的是保留一个以guid为键的对ScheduleTriggers的静态引用。然后将guid传递给作业详细信息,该作业细节将使用它查找ScheduleTrigger并引发事件。不漂亮,但工作是:

代码语言:javascript
复制
public class ScheduleTrigger : BaseTrigger
    {
        Guid name = Guid.NewGuid();
        static Dictionary<Guid, ScheduleTrigger> triggers = new Dictionary<Guid, ScheduleTrigger>();
        public static Dictionary<Guid, ScheduleTrigger> Triggers
        {
            get
            {
                return triggers;
            }
        }
        public void Init(Trigger triggerParam)
        {
           ....
           JobDetail jobDetail = new JobDetail(name.ToString(), Type.GetType(schedTrig.JobType.JobClassName));
           Triggers.Add(name, this);
        }
        public void Dispose()
        {
            if (Triggers.ContainsKey(name))
            {
                triggers.Remove(name);
            }
            base.Dispose();
        }

        internal void RaiseEvent()
        {
            base.OnInputTrigged(string.Empty);
        }
   }

和非常简单的工作来引发事件

代码语言:javascript
复制
   EventRaiserJob : IJob
   {
       public void Execute(JobExecutionContext context)
       {
           Guid name = new Guid(context.JobDetail.Name);
           ScheduleTrigger.Triggers[name].RaiseEvent();
       }
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6265022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档