gpt4 book ai didi

c# - 如何在 Bootstrap 类仍在运行时关闭应用程序?

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:15 25 4
gpt4 key购买 nike

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

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

但是, Bootstrap 代码继续运行,并且在 CreateShell() 方法中设置数据上下文时出现“ResolutionFailedException was unhandled”异常错误。显然,由于 catch block ,SomeClass 方法和接口(interface)没有注册到容器中。

在调用 Application.Current.Shutdown() 后, Bootstrap 代码似乎继续运行。我需要在调用关机后立即停止 Bootstrap 代码。

关于如何在不创建 ResolutionFailedException 的情况下关闭应用程序有什么想法吗?

ResolutionFailedException exception details --> Resolution of the dependency failed, type = "SomeClass", name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, SomeClass, is an interface and cannot be constructed. Are you missing a type mapping?

public class AgentBootstrapper : UnityBootstrapper
{
protected override void ConfigureContainer()
{
base.ConfigureContainer();

var eventRepository = new EventRepository();
Container.RegisterInstance(typeof(IEventRepository), eventRepository);

var dialog = new DialogService();
Container.RegisterInstance(typeof(IDialogService), dialog);

try
{
var someClass = new SomeClass();
Container.RegisterInstance(typeof(ISomeClass), SomeClass);
}
catch (ConfigurationErrorsException e)
{
dialog.ShowException(e.Message + " Application shutting down.");
**Application.Current.Shutdown();**
}
}

protected override System.Windows.DependencyObject CreateShell()
{
var main = new MainWindow
{
DataContext = new MainWindowViewModel(Container.Resolve<IEventRepository>(),
Container.Resolve<IDialogService>(),
Container.Resolve<ISomeClass>())
};

return main;
}

protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (Window)Shell;
Application.Current.MainWindow.Show();
}
}

最佳答案

出现此行为是因为此时您正在执行应用程序的 OnStartup。我想你是这样做的:

protected override void OnStartup(StartupEventArgs e)
{
new AgentBootstrapper().Run();
}

OnStartup 必须在应用程序关闭之前完成,以便 Bootstrap 继续执行。您可能会抛出另一个异常以退出 Run():

 ... catch (ConfigurationErrorsException e)
{
dialog.ShowException(e.Message + " Application shutting down.");
throw new ApplicationException("shutdown");
}

然后在 StartUp() 中捕获它:

protected override void OnStartup(StartupEventArgs e)
{
try
{
new AgentBootstrapper().Run();
}
catch(ApplicationException)
{
this.Shutdown();
}
}

关于c# - 如何在 Bootstrap 类仍在运行时关闭应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com