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();
}
}