WPF依赖注入IHostApplicationLifetime关闭程序
使用Application.Current.Shutdown();退出会报异常 应该使用 app.Dispatcher.InvokeShutdown();
Application.Current.Shutdown();
app.Dispatcher.InvokeShutdown();
static App app = new();[STAThread]public static void Main(){_host.Start();using (var scope = _host.Services.CreateScope()){var services = scope.ServiceProvider;var context = services.GetRequiredService<MyContext>();context.Database.EnsureCreated();var appLifetime = services.GetRequiredService<IHostApplicationLifetime>();appLifetime.ApplicationStopping.Register(OnStopping);// DbInitializer.Initialize(context);}app.InitializeComponent();app.MainWindow = _host.Services.GetRequiredService<MainWindow>();app.MainWindow.Visibility = Visibility.Visible;app.Run();}private static void OnStopping(){app.Dispatcher.InvokeShutdown();// Application.Current.Shutdown();// 会报异常}
crit: Microsoft.Extensions.Hosting.Internal.ApplicationLifetime[7]An error occurred stopping the applicationSystem.AggregateException: One or more errors occurred. (调用线程无法访问此对象,因为另一个线程拥有该对象。)---> System.InvalidOperationException: 调用线程无法访问此对象,因为另一个线程拥有该对象。at System.Windows.Threading.Dispatcher.<VerifyAccess>g__ThrowVerifyAccess|7_0()at System.Windows.Application.CriticalShutdown(Int32 exitCode)