C# 析构函数vs App.Current.Exit vs所有其他退出处理程序

C# 析构函数vs App.Current.Exit vs所有其他退出处理程序,c#,destructor,exit,C#,Destructor,Exit,我遇到了一个问题,我需要让我的类在退出时运行一段代码。 基本上,代码将属性和参数写入XML文件,以便将它们发送给程序员,以复制与客户端相同的设置 所以我在我的每个类上都创建了这样的代码 ~WorkspaceViewModel() { this.Save("Workspace"); } 我的问题是,我找不到将在此析构函数之前运行的处理程序。 我试过以下方法 //App.Current.Exit += new System.Windows.E

我遇到了一个问题,我需要让我的类在退出时运行一段代码。 基本上,代码将属性和参数写入XML文件,以便将它们发送给程序员,以复制与客户端相同的设置

所以我在我的每个类上都创建了这样的代码

    ~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。我只是在测试它是否有帮助,析构函数永远都不是合适的退出处理程序。终结以不可预测的顺序发生。当您试图保存已完成的对象时,您的代码将在非常尴尬的时刻随机崩溃。所有具有应用程序类的框架都会提供一个事件,告诉您应用程序何时退出。没有人知道你在使用哪个框架。你告诉我这个很好。提供一个替代方案怎么样。