什么是正确的方法来清除quartz.net ramjobstore而无需在c#中重新启动应用程序

时间:2011-05-31 14:31:54

标签: c# scheduled-tasks quartz-scheduler scheduler quartz.net

如果有办法做到这一点,我还可以通过查看清除之前和之后的ramstore来确认。我们如何以编程方式查看ramstore的内容?在我的情况下,我正在阅读所有工作并从文件中触发信息。在某些自定义事件中,我需要停止调度程序并重新启动,而无需重新启动应用程序。 谢谢

2 个答案:

答案 0 :(得分:1)

Quartz.NET框架中的RamJobStore提供了几种方法来查看它的内容,最简单的是'GetJobGroupNames()'和'GetJobNames()'函数:

public virtual string[] GetJobGroupNames( 
  SchedulingContext ctxt
)

public virtual string[] GetJobNames( 
  SchedulingContext ctxt,
  string groupName
)

你可以像这样使用它:

foreach(string group in ramstore.GetJobGroupNames(...))
  foreach(string job in ramstore.GetJobNames(..., group))
    MessageBox.Show(String.Format("{0} (Group: {1})", job, group));

当然这是你想要的,因为它只会显示你在RamJobStore中所有作业的消息框,但它确实允许你查看整个商店的内容。此外,您现在可以使用两种方法删除所有作业。您可以使用“RemoveJob()”或“Shutdown()”功能。

foreach(string group in ramstore.GetJobGroupNames(...))
  foreach(string job in ramstore.GetJobNames(..., group))
    ramstore.RemoveJob(..., job, group);

这将删除对象上的所有作业,但在大型商店中可能会耗费大量时间。因此,还有一个'Shutdown()'函数,它只是从存储器中删除整个存储(之后你可以创建一个新存储)。

我把...放在一些函数中,这是你用来存储作业的 SchedulingContext

答案 1 :(得分:0)

fyi来自文档:

Never use a JobStore instance directly in your code. 
For some reason many people attempt to do this.
The JobStore is for behind-the-scenes use of Quartz itself. 
You have to tell Quartz (through configuration) which JobStore 
to use, but then you should only work with the Scheduler interface
in your code.

在此处找到:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/job-stores.html

在我对石英的有限经验中,我认为你可以抓住调度程序的内容,然后关闭调度程序并启动一个新程序?