Form_Closing、Form_Unloadイベントでの例外は全てハンドリングし、終了するようにする。イベントからイベントハンドラを外し終了。出来る?解决思

Form_Closing、Form_Unloadイベントでの例外は全てハンドリングし、終了するようにする。イベントからイベントハンドラを外し終了。出来る?【対応内容】Ma

Form_Closing、Form_Unloadイベントでの例外は全てハンドリングし、終了するようにする。イベントからイベントハンドラを外し終了。出来る?
【対応内容】
MainMenuInvoker.Application_ThreadExceptionで、Application.Exitを行っているが、
Form.Closingイベントが発生してしまう為、イベントハンドラを外して終了させるか、
強制終了するように修正する。

求助,怎么去避免事件

[解决办法]
本身机制就是这样的,如果你不想触发的话,可以窗体代码里加个全局变量,如
bool isExit = false;

当application.exit();后,
立马写一句isExit =true;

然后再Form1_FormClosing里,
加条if(isExit == false ){..........}
这样,就算因为application.exit();触发了Closing事件,
也因为已经isExit= true而不会调用if(isExit == false ){..........}
这个花括号里面的代码了
[解决办法]
.NET是安全代码,不支持,要直接关闭程序只能用API,任何.NET代码都无法绕过你所指的事件。

C# code
        [Flags]        public enum ProcessAccessFlags : uint        {            All = 0x001F0FFF,            Terminate = 0x00000001,            CreateThread = 0x00000002,            VMOperation = 0x00000008,            VMRead = 0x00000010,            VMWrite = 0x00000020,            DupHandle = 0x00000040,            SetInformation = 0x00000200,            QueryInformation = 0x00000400,            Synchronize = 0x00100000        }        [DllImport("kernel32.dll")]        static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId);        [DllImport("kernel32.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);        [DllImport("kernel32.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        static extern bool GetExitCodeProcess(IntPtr hProcess, out uint lpExitCode);        private void KillProcess(string processId,string processName)        {            IntPtr killer;            try            {                killer = OpenProcess(ProcessAccessFlags.All, false, uint.Parse(processId));                MessageBox.Show(killer.ToString());                uint exitcode = 0;                bool ret = GetExitCodeProcess(killer, out exitcode);                ret = TerminateProcess(killer, exitcode);                if (ret)                    MessageBox.Show(string.Format("成功关闭程序{0}。", processName));                else                {                    exitcode = 0;                    MessageBox.Show(string.Format("杀死进程{0}时失败,原因不明。", processName));                }            }            catch (Exception Exc)            {                MessageBox.Show(string.Format("杀死进程{0}时失败,原因是{1}。", processName, Exc.Message));            }        }