我有自己的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);
}这个接口的一个实现是一个FileCreatedTrigger,它在创建文件时触发事件。
我想要另一个实现,在这个实现中,我可以将Trigger设置为在一定的时间间隔内触发(很像Windows )。所以,我看了一下Quartz.Net,这就是我想要的。
问题是,如何从一个IJob**?**激发InputTrigged事件,这正是Quartz所使用的。IJob只实现不能调用父实例的执行(在本例中是ITrigger,因为它不知道这是哪个实例。
希望我说得很清楚。我希望能够在使用Quartz.Net时保留我的接口Quartz.Net,这是另一个如何触发的实现。
发布于 2011-06-08 11:45:18
我最后所做的是保留一个以guid为键的对ScheduleTriggers的静态引用。然后将guid传递给作业详细信息,该作业细节将使用它查找ScheduleTrigger并引发事件。不漂亮,但工作是:
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();
}
}https://stackoverflow.com/questions/6265022
复制相似问题