安排适用于特定对象实例的一次性作业

时间:2013-07-03 14:55:32

标签: c# .net quartz.net

假设以下情况:
我有一个视图模型,应该在特定延迟后自动关闭。

这样的事情:

public AutoCloseViewModel : ViewModelBase
{
    public void Close()
    {
        /* perform actions necessary to close
           the view model and its associated view */
    }

    protected override OnActivate()
    {
        // schedule job that calls Close on this instance, something like
        var trigger = TriggerBuilder.Create()...;
        trigger.Job = new DelegateJob(() => Close()); // <----
        scheduler.ScheduleJob(trigger);
    }
}

由于以下原因,行trigger.Job = new DelegateJob(() => Close());显然不起作用:

  1. Job上没有ITrigger属性。
  2. 作业类应该是可序列化的。
  3. 问题:
    有没有办法做我想用Quartz.net做的事情,还是我试图将它用于不适合的东西?

    顺便说一句:我知道this question但是对我而言,接受的答案似乎滥用了Quartz.net而另一个答案对我没有帮助。

1 个答案:

答案 0 :(得分:0)

对于这种情况,我同意计时器应该是首选方式。我认为为此目的的调度程序会使事情变得复杂。

使用调度程序或计时器都会产生异步。

如果您确实想使用调度程序,可以使用[Messenger]与viewmodel进行通信,以发送给定作业完成的消息,并在viewmodel中注册该消息。1