C# 析构函数vs App.Current.Exit vs所有其他退出处理程序
我遇到了一个问题,我需要让我的类在退出时运行一段代码。 基本上,代码将属性和参数写入XML文件,以便将它们发送给程序员,以复制与客户端相同的设置 所以我在我的每个类上都创建了这样的代码C# 析构函数vs App.Current.Exit vs所有其他退出处理程序,c#,destructor,exit,C#,Destructor,Exit,我遇到了一个问题,我需要让我的类在退出时运行一段代码。 基本上,代码将属性和参数写入XML文件,以便将它们发送给程序员,以复制与客户端相同的设置 所以我在我的每个类上都创建了这样的代码 ~WorkspaceViewModel() { this.Save("Workspace"); } 我的问题是,我找不到将在此析构函数之前运行的处理程序。 我试过以下方法 //App.Current.Exit += new System.Windows.E
~WorkspaceViewModel()
{
this.Save("Workspace");
}
我的问题是,我找不到将在此析构函数之前运行的处理程序。
我试过以下方法
//App.Current.Exit += new System.Windows.ExitEventHandler(ProgramExit);
//AppDomain.CurrentDomain.ProcessExit += new EventHandler(ProgramExit);
//App.Current.MainWindow.Closed += new EventHandler(ProgramExit);
//App.Current.Windows[0].Closed += new EventHandler(ProgramExit);
//AppDomain.CurrentDomain.DomainUnload += new EventHandler(ProgramExit);
//App.Current.MainWindow.Unloaded += new System.Windows.RoutedEventHandler(ProgramExit);
//System.Windows.Forms.Application.ApplicationExit += new EventHandler(ProgramExit);
//System.Windows.Application.Current.Exit += new System.Windows.ExitEventHandler(ProgramExit);
在网上看到了一些关于修改应用程序类的东西,所以我做了这个
public partial class App : System.Windows.Application
{
public void OnExit()
{
this.OnExit();
}
public void App_Exit(Object sender, System.Windows.ExitEventArgs Args)
{
//Somelogic here
}
public App()
{
this.Exit += new System.Windows.ExitEventHandler(App_Exit);
}
}
有人能帮忙吗。您使用的是Windows窗体吗?如果是,您可以使用表单的关闭事件。更多阅读: 定义: 在窗体关闭时发生 例如:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if(MessageBox.Show("Do you want to exit?", "Your app title", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
// cancel the closing
}
//otherwise the application will exit
}
您实际上不需要if语句,您可以在这个事件中调用Save方法,然后让应用程序退出。您可以通过伪代码这样做
Init();
window.Show();
Deinit();
在应用程序启动时显式运行初始值设定项,在退出时显式运行去初始化器
在WPF中,它是通过使用应用程序事件、覆盖或设置App.xml的页面构建操作来完成的。在您的实现中,不能声明构造函数,因为它已经生成文件App.g.i.cs。您可以使用应用程序启动事件,也可以在xaml中简单地设置事件。。我所需要做的就是像这样在App类上创建一个析构函数
public partial class App : Application
{
~App()
{
Administration.Model.DataBaseModel.GlobalCatalogue.ToFile();
}
}
我不确定这是不是最好的方法
然而,我仍然愿意接受更好的想法。。谢谢大家。public partial class App:System.Windows.Application,所以我想WPF是它的WPF。我只是在测试它是否有帮助,析构函数永远都不是合适的退出处理程序。终结以不可预测的顺序发生。当您试图保存已完成的对象时,您的代码将在非常尴尬的时刻随机崩溃。所有具有应用程序类的框架都会提供一个事件,告诉您应用程序何时退出。没有人知道你在使用哪个框架。你告诉我这个很好。提供一个替代方案怎么样。