C# 如何在引导程序类仍在运行时关闭应用程序?

C# 如何在引导程序类仍在运行时关闭应用程序?,c#,wpf,prism,bootstrapper,C#,Wpf,Prism,Bootstrapper,我正在使用Prism UnityExtensions引导程序类来启动我的WPF应用程序。unityextensions引导程序仍在运行时,如何关闭应用程序 请参阅下面我的引导程序类。SomeClass对象可能会引发自定义异常(致命)。如果抛出自定义异常,我需要关闭应用程序。我正在使用Application.Current.Shutdown()关闭应用程序 但是,引导程序代码继续运行,在CreateShell()方法中设置datacontext时出现“ResolutionFailedExcepti

我正在使用Prism UnityExtensions引导程序类来启动我的WPF应用程序。unityextensions引导程序仍在运行时,如何关闭应用程序

请参阅下面我的引导程序类。
SomeClass
对象可能会引发自定义异常(致命)。如果抛出自定义异常,我需要关闭应用程序。我正在使用
Application.Current.Shutdown()
关闭应用程序

但是,引导程序代码继续运行,在
CreateShell()
方法中设置datacontext时出现“ResolutionFailedException was unhandled”异常错误。显然,由于catch块,
SomeClass
方法和接口没有注册到容器中

在调用
Application.Current.Shutdown()
后,引导程序代码似乎继续运行。我需要在调用shutdown之后立即停止引导程序代码

您知道如何关闭应用程序而不创建
ResolutionFailedException

ResolutionFailedException异常详细信息--> 依赖项解析失败,类型=“SomeClass”,名称=“(无)”。 解析时发生异常。 异常为:InvalidOperationException-当前类型SomeClass是一个接口,无法构造。是否缺少类型映射

公共类代理bootstrapper:UnityBootstrapper
{
受保护的覆盖无效配置容器()
{
base.ConfigureContainer();
var eventRepository=new eventRepository();
Container.RegisterInstance(typeof(IEventRepository),eventRepository);
var dialog=new DialogService();
RegisterInstance(typeof(IDialogService),对话框);
尝试
{
var someClass=new someClass();
Container.RegisterInstance(typeof(isomoclass),SomeClass);
}
捕获(配置错误异常e)
{
ShowException(e.Message+“应用程序关闭”);
**Application.Current.Shutdown()**
}
}
受保护的覆盖System.Windows.DependencyObject CreateShell()
{
var main=新的主窗口
{
DataContext=新的MainWindowViewModel(Container.Resolve(),
Container.Resolve(),
Container.Resolve())
};
回水总管;
}
受保护的覆盖无效初始值设置Shell()
{
base.InitializeShell();
Application.Current.MainWindow=(窗口)Shell;
Application.Current.MainWindow.Show();
}
}

发生这种行为是因为此时您正在执行应用程序的启动。我想你是这样做的:

protected override void OnStartup(StartupEventArgs e)
{
    new AgentBootstrapper().Run();
}
必须先完成启动,然后应用程序才能关闭,这样引导程序才能继续执行。您可能会抛出另一个异常以退出运行()

然后在启动()中捕获它:


你明白了!!我确实从OnStartup方法运行引导程序。我没有意识到OnStartup方法必须在应用程序关闭之前完成运行。我根据您的示例更改了代码,效果非常好。非常感谢你的帮助。
protected override void OnStartup(StartupEventArgs e)
{
    new AgentBootstrapper().Run();
}
 ... catch (ConfigurationErrorsException e)
 {
    dialog.ShowException(e.Message + " Application shutting down.");
    throw new ApplicationException("shutdown");
 }
protected override void OnStartup(StartupEventArgs e)
{
    try
    {
        new AgentBootstrapper().Run();
    }
    catch(ApplicationException)
    {
        this.Shutdown();
    }
}