Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 石英.Net触发事件_C#_Events_Quartz Scheduler - Fatal编程技术网

C# 石英.Net触发事件

C# 石英.Net触发事件,c#,events,quartz-scheduler,C#,Events,Quartz Scheduler,我有自己的ITrigger。基本上,它如下所示: public interface ITrigger : IDisposable { /// <summary> /// Occurs when an input has been trigger. /// </summary> event InputTriggedEventHandler InputTrigged; /// <summary> /// Starts

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

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);
}
公共接口ITrigger:IDisposable
{
/// 
///在已触发输入时发生。
/// 
事件INPUTTRIGGEDVENTHANDLER InputTrigged;
/// 
///启动触发器。
/// 
///有关要启动的触发器的数据。
void Init(触发器);
}
此接口的一个实现是
FileCreatedTrigger
,它在创建文件时触发事件

我想要另一个实现,在这个实现中,我可以设置
触发器
以一定的间隔触发(很像Windows任务调度器)。所以,我看了这张照片,这正是我想要的

问题是如何从
IJob
触发InputRiged事件?
这正是Quartz所使用的。IJob只实现execute,它不能调用父对象(在本例中是
ITrigger
),因为它不知道这是哪个实例


希望我说得清楚。我希望在使用Quartz.Net时能够保留我的界面
ITrigger
,它有另一个如何触发的实现。

我最后做的是保留对ScheduleTrigger的静态引用,并将guid作为键。然后将guid传递给jobdetail,jobdetail使用它来查找ScScheduleTrigger并引发事件。不漂亮,但执行以下操作:

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);
        }
   }
   EventRaiserJob : IJob
   {
       public void Execute(JobExecutionContext context)
       {
           Guid name = new Guid(context.JobDetail.Name);
           ScheduleTrigger.Triggers[name].RaiseEvent();
       }
   }