public async Task <int> TryExecute(string[] arguments) { _BackgroundServicesManager.StartBackgroundServices(); await _ApplicationLifetimeManager.GracefulTerminationCancellationToken.AsTask(); await _BackgroundServicesManager.WaitForBackgroundServicesToStop(); return(0); }
protected override void OnStart(string[] args) { using (_Logger.LogScope(LogLevel.Debug, $"Starting background services in '{ServiceName}'")) { _Logger.LogInformation($"Starting background services in '{ServiceName}'"); lock (_Lock) { _CancellationTokenRegistration = _ApplicationLifetimeManager.GracefulTerminationCancellationToken.Register(GracefulTerminationRequested); } _BackgroundServicesManager.StartBackgroundServices(); _Logger.LogInformation($"Background services in '{ServiceName}' started successfully"); } base.OnStart(args); }
public async Task <int> RunAsync() { using (_Logger.LogScope(LogLevel.Trace, "TrayApp.RunAsync")) { _BackgroundServicesManager.StartBackgroundServices(); try { await _ApplicationLifetimeManager.GracefulTerminationCancellationToken.AsTask(); return(0); } catch (Exception ex) { _Logger.LogException(ex); return(1); } finally { await _BackgroundServicesManager.WaitForBackgroundServicesToStop(); } } }
public void Start() { _BackgroundServicesManager.StartBackgroundServices(); Configure(Application.Current.NotNull()); }
public static void RunWinFormsMainWindow <T>(bool useBackgroundServices) where T : class, IServicesBootstrapper { var container = ContainerFactory.Bootstrap <ServicesBootstrapper <T> >(); IBackgroundServicesManager backgroundServicesManager = container.Resolve <IBackgroundServicesManager>().NotNull(); IApplicationLifetimeManager applicationLifetimeManager = container.Resolve <IApplicationLifetimeManager>(); if (useBackgroundServices) { backgroundServicesManager.StartBackgroundServices(); } try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form mainForm = container.Resolve <Form>(serviceKey: "MainForm"); bool closingHasBeenHandled = true; applicationLifetimeManager.GracefulTerminationCancellationToken.Register( () => { if (closingHasBeenHandled) { return; } closingHasBeenHandled = true; var close = new Action(() => mainForm.Close()); if (mainForm.InvokeRequired) { mainForm.BeginInvoke(close); } else { close(); } }); mainForm.FormClosed += (s, e) => { closingHasBeenHandled = true; applicationLifetimeManager.SignalGracefulTermination(); }; Application.Run(mainForm); } catch (Exception) when(!Debugger.IsAttached) { Environment.ExitCode = 1; throw; } finally { if (useBackgroundServices) { backgroundServicesManager.WaitForBackgroundServicesToStop().GetAwaiter().GetResult(); } } }