Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何管理应用程序关闭的方式?_C#_C# 4.0 - Fatal编程技术网

C# 如何管理应用程序关闭的方式?

C# 如何管理应用程序关闭的方式?,c#,c#-4.0,C#,C# 4.0,我需要以同样的方式关闭我的应用程序,无论它是直接关闭还是从任务栏或任务管理器关闭。我需要做一些预先设置,并自动生成日志文件,每次应用程序关闭前 例如,每次我的申请表退出时,我都会给它以下效果,但当我从任务栏或任务管理器关闭我的应用程序时,不会显示此效果 System.Windows.Forms.Timer closeTimer = new System.Windows.Forms.Timer(); void lblClose_Click(object sender, Syste

我需要以同样的方式关闭我的应用程序,无论它是直接关闭还是从任务栏或任务管理器关闭。我需要做一些预先设置,并自动生成日志文件,每次应用程序关闭前

例如,每次我的申请表退出时,我都会给它以下效果,但当我从任务栏或任务管理器关闭我的应用程序时,不会显示此效果

    System.Windows.Forms.Timer closeTimer = new System.Windows.Forms.Timer();

    void lblClose_Click(object sender, System.EventArgs e)
    {
        closeTimer.Tick += new EventHandler(closeTimer_Tick);
        closeTimer.Interval = 10;
        closeTimer.Start();            
    }

    void closeTimer_Tick(object sender, EventArgs e)
    {
        int a = (int)(this.Opacity * 100);
        a--;
        this.Opacity = ((double)a / 100);
        if ((this.Opacity*100) == 0)
            this.Close();
    }

我假设您的应用程序是System.Windows.Forms.Application。如果是这样,您可以侦听ApplicationExit事件

因此,大体上,做一些类似的事情:

Application.ApplicationExit += (s,e) =>
{
   // Your exit code.
};

请参见

您需要处理
FormClosing
事件。 更多信息请点击此处:

来自:


这比使用
FormClosed
更可取,因为表单关闭并不一定意味着应用程序关闭(当然,特定于您的代码).

也许这个问题会有用:
System.Windows.Forms.Form
有两个事件
FormClosing
FormClosing
您可以在这种情况下使用。@PLB只会捕获表单关闭-这不一定意味着应用程序正在关闭。@Mansfield是的,对。我忘了提到在关闭应用程序时抛出的事件中执行所有这些代码行为。请务必理解,有一些方法可以关闭未引发此事件的应用程序,因此您最好意识到这一点,并处理您期望发生的事情尚未发生的情况。正如我在评论中所说,这并不能保证应用程序正在关闭,只有表单。@Mansfield-还有很多方法可以关闭应用程序,这样也不会抛出ProcessExit事件。@Ramhound粗暴地终止进程,是的。它不是绝对正确的——但它比使用FormClose要好。我承认我误用了保证这个词。
[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
    AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
    Application.Run(new MainForm());
}