WPF依赖注入IHostApplicationLifetime关闭程序

发布于:2025-04-19 ⋅ 阅读:(25) ⋅ 点赞:(0)

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)

网站公告

今日签到

点亮在社区的每一天
去签到