QuartzNet在blazor-winform的使用
通过构造函数获取ISchedulerFactory private async void InitJob() { var _scheduler = await _schedulerFactory.GetScheduler(); _scheduler.JobFactory = new QuartzJobFactory(_serviceProvider); ;// await factory.GetScheduler(); IJobDetail job = JobBuilder.Create<QuartzJobServer>()// .WithIdentity("job1", "group1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") //.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()) .WithCronSchedule(coravelConfig.CustomCorn!) .Build(); await _scheduler.ScheduleJob(job, trigger); await _scheduler.Start(); }
public class QuartzJobFactory : IJobFactory { private readonly IServiceProvider _serviceProvider; public QuartzJobFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) { return _serviceProvider.GetService<QuartzJobServer>()!; } public void ReturnJob(IJob job) { var disposable = job as IDisposable; disposable?.Dispose(); } //public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) //{ // throw new NotImplementedException(); //} //public void ReturnJob(IJob job) //{ // throw new NotImplementedException(); //} }
public class QuartzJobServer : IJob { private readonly ISynchronousService _synchronousService; public QuartzJobServer( ISynchronousService synchronousService // IServiceScopeFactory serviceScopeFactory ) { _synchronousService = synchronousService;// serviceScopeFactory.CreateScope().ServiceProvider.GetService<ISynchronousService>()!;// synchronousService; } public async Task Execute(IJobExecutionContext context) { await _synchronousService.GetPayData(DateTime.Now.ToString("yyyyMMdd"), TypeEnum.New); await Task.CompletedTask; } }
services.AddScoped<MainFrom>(); services.AddWindowsFormsBlazorWebView(); services.AddMasaBlazor(); services.AddScoped<QuartzJobServer>(); services.AddScoped<ISynchronousService, SynchronousService>(); services.AddLogging(x => x.AddNLog()); services.AddQuartz(); services.AddSignalR(); services.AddQuartzHostedService(x => x.WaitForJobsToComplete = true); services.AddSingleton<IConfiguration>(configBuild); var config = configBuild.GetSection("CustomParameter").Get<CoravelConfig>(); var dbConfig = configBuild.GetSection("ConnectionStrings").Get<DbConfig>(); services.Configure<CoravelConfig>(x => x.CustomCorn = config!.CustomCorn); services.Configure<DbConfig>(x => x.ConnString = dbConfig!.ConnString); return services.BuildServiceProvider();
//这里有些是我自己的,用的blazor-winform,自己看着删除
最后添加启动 var serviceProvider = services.InitDI(configBuild); Application.Run(serviceProvider.GetRequiredService<MainFrom>());