using FastGithub.Windows.Hosting; using Microsoft.Extensions.Options; using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace Microsoft.Extensions.Hosting { /// /// WinForm生命周期 /// sealed class WinFormHostLifetime : IHostLifetime, IDisposable { private readonly IHostApplicationLifetime applicationLifetime; private readonly IOptions applicationOptions; public WinFormHostLifetime(IHostApplicationLifetime applicationLifetime, IOptions applicationOptions) { this.applicationLifetime = applicationLifetime; this.applicationOptions = applicationOptions; } public Task WaitForStartAsync(CancellationToken cancellationToken) { var option = this.applicationOptions.Value; if (option.EnableVisualStyles == true) { Application.EnableVisualStyles(); } Application.SetHighDpiMode(option.HighDpiMode); Application.SetCompatibleTextRenderingDefault(option.CompatibleTextRenderingDefault); Application.ApplicationExit += OnApplicationExit; return Task.CompletedTask; } private void OnApplicationExit(object? sender, System.EventArgs e) { Application.ApplicationExit -= OnApplicationExit; this.applicationLifetime.StopApplication(); } public Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } public void Dispose() { Application.ApplicationExit -= OnApplicationExit; } } }