安排在特定对象实例上工作的一次性作业



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

类似这样的东西:

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. ITrigger上不存在Job属性
  2. 作业类应该是可序列化的

问题:
有没有一种方法可以做我想用Quartz.net做的事情,或者我想用它做一些它不是为之设计的事情?

BTW:我知道这个问题,但对我来说,公认的答案似乎滥用了Quartz.net,而另一个答案对我没有帮助。

对于这种情况,我同意计时器应该是首选方式。我觉得出于这个目的的日程安排会使事情复杂化。

使用调度器或定时器都会产生异步的东西。

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

最新更新