none
如何强行关闭程序,不触发FormClosings事件? RRS feed

  • 问题

  • 如何强行关闭程序,不触发FormClosings事件?
    原来用的是Application.Exit,但是它会触发FormClosings事件:(
    现在用的是
            Try
                Process.GetCurrentProcess.Kill()
            Catch ex As Exception

            End Try
    但是不知道有没有隐患呢?
    请问还有没有更好的方法?
    2008年4月10日 2:43

答案

  •  

    你可以尝试一下,设置一个全局变量,当有unhandled exception发生时,标志这个全局变量,在formclosing的事件处理函数中,check这个全局变量,若设置了,就不执行其他代码,直接return
    2008年4月14日 5:53

全部回复

  •  

    为什么要不触发formclosing事件呢?
    2008年4月10日 3:23
  • 为了在出现业务处理以外的异常的时候,直接关闭程序。

    2008年4月10日 5:02
  • 这样,其实添加事件用+=这个来帮定一个或多个事件的,在不需要出发事件的时候加一条对应的-=语句,就可以把事件暂时删掉,你试试。

    2008年4月10日 6:18
    版主
  •  

    在关闭整个进程时,如果你的进程有涉及窗体的打开,那在关闭窗口的时候肯定会有formclosing事件的出现。如果出现异常,你要关闭整个进程,formclosing的出现应该不会影响到你对进程的关闭。
    2008年4月10日 6:32
  •  liuyc 写:
    为了在出现业务处理以外的异常的时候,直接关闭程序。

     

    可以用AppDomain.UnhandledException 事件 捕捉业务处理以外的异常再处理

    2008年4月10日 7:18
    版主
  • #Region "Others Exception "

        Public Shared Sub AddExceptionHandler()
            Static AddHandlerCount As Integer = 0 
            If AddHandlerCount > 0 Then Return
            AddHandlerCount = 1
     
            AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf OnUnhandledAppDomainException
            AddHandler Application.ThreadException, AddressOf OnUnhandledThreadException
        End Sub

        Public Shared Sub OnUnhandledAppDomainException(ByVal sender As Object, ByVal e As System.UnhandledExceptionEventArgs)

            MessageBox.Show(e.
    Message , String.Empty, _
                            MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1)
            Try
                Process.GetCurrentProcess.Kill()
            Catch ex As Exception

            End Try
        End Sub

        Public Shared Sub OnUnhandledThreadException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)

            Dim message As String = e.Exception.Message                       

            MessageBox.Show(
    message, String.Empty, MessageBoxButtons.OK, _
                            MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1)
            Try
                Process.GetCurrentProcess.Kill()
            Catch ex As Exception

            End Try

        End Sub

    #End Region

    因为FormClosing事件中还有让用户确认是否需要关闭的代码,以及其他的一些业务性的代码,所以一旦出现没有处理的异常,就强行关闭整个应用程序。
    2008年4月10日 11:15
  •  

    你可以尝试一下,设置一个全局变量,当有unhandled exception发生时,标志这个全局变量,在formclosing的事件处理函数中,check这个全局变量,若设置了,就不执行其他代码,直接return
    2008年4月14日 5:53