Sie verwenden den Zero Thread Scheduler, um Jobs zu planen. Beispiel Scheduler Initialisierungscode:
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceId"] = "AUTO";
properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
properties["quartz.jobStore.useProperties"] = "true";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.jobStore.tablePrefix"] = tablePrefix;
properties["quartz.jobStore.clustered"] = "false";
properties["quartz.dataSource.default.connectionString"] = connectionString;
properties["quartz.dataSource.default.provider"] = "SqlServer-20";
schedFactory = new StdSchedulerFactory(properties);
BaseScheduler = schedFactory.GetScheduler();
Beispiel Scheduling-Funktion:
protected ITrigger CreateSimpleTrigger(string tName, string tGroup, IJobDetail jd, DateTime startTimeUtc,
DateTime? endTimeUtc, int repeatCount, TimeSpan repeatInterval, Dictionary<string, string> dataMap,
string description = "")
{
if (BaseScheduler.GetTrigger(new TriggerKey(tName, tGroup)) != null) return null;
var st = TriggerBuilder.Create().
WithIdentity(tName, tGroup).
UsingJobData(new JobDataMap(dataMap)).
StartAt(startTimeUtc).
EndAt(endTimeUtc).
WithSimpleSchedule(x => x.WithInterval(repeatInterval).WithRepeatCount(repeatCount)).
WithDescription(description).
ForJob(jd).
Build();
return st;
}
Offensichtlich müssen Sie alle relevanten Felder in der Benutzeroberfläche bieten und Werte aus diesen Feldern in die Funktion übergeben. Beispiel-Screenshot von einigen der erforderlichen Felder:
![Sample scheduling UI](https://i.stack.imgur.com/Z4et3.png)
Ihr Windows-Dienst wird in OnStart() -Methode in einer sehr ähnlichen Weise, wie ein Multi Thread-Scheduler initialisieren, dass Zero-Thread-Scheduler wurde oben und das Multi initialisiert Thread Scheduler überwacht alle Trigger in Ihrer Datenbank und startet Ihre Jobs wie in diesen Triggern angegeben. Quartz.net wird in dieser Hinsicht alles schwer machen. Sobald Sie Ihre Jobs geplant haben und die Trigger in der Datenbank sind, müssen Sie nur diesen Multi Thread Scheduler initialisieren, ihn mit der Datenbank verbinden, die Trigger enthält, und diese Jobs weiter ausführen und Ihren Code ausführen, solange der Service läuft.
Danke Dean. Es tut uns leid, dass wir in eine andere Zeitzone gereist sind, also etwas verspätet. Die Lösung macht Sinn. Aus meiner WPF-Anwendung heraus erstelle ich einfach die Jobdetails und Triggerdetails und rufe ScheduleJob im Scheduler auf, der den Job speichern und Details in meinen Quartz-Datenbanktabellen auslösen soll. Und dann vom Windows-Dienst bekomme ich den Scheduler und rufe die Scheduler.Start-Methode auf, um sie Jobs auszuführen. Recht? – Maverick0208
Korrekt, sobald Sie Ihren Scheduler initialisieren und Start() aufrufen, wird er Ihre DB überwachen und alle geplanten Jobs ausführen ... –
Nochmals vielen Dank. – Maverick0208