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 application
System.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)