【问题标题】:Execute a subroutine before exiting the application在退出应用程序之前执行一个子程序
【发布时间】:2014-12-29 21:44:13
【问题描述】:

我正在设计一个客户端-服务器应用程序,其中客户端请求各种数据,服务器从本地 SQL 服务器检索数据。

我需要在应用程序退出时执行一个函数,以便告诉相关服务服务器处于离线状态,但我无法确切地了解如何执行此操作。

This related question似乎有了答案:

处理AppDomain.ProcessExit event,它在应用程序的父进程退出时引发。

但是,当使用下面的代码时,onExit 子例程不会在应用程序关闭时执行,可能是因为我使用了错误的方法来解决这个问题,或者在应用程序退出时没有执行Environment.Exit

    Dim myConn As SqlConnection
    Dim cmd As New SqlCommand

    Sub Main()
        AddHandler AppDomain.CurrentDomain.ProcessExit, AddressOf onExit 
    End Sub

    Public Sub onExit(sender As Object, e As EventArgs)
        'Unrelated code removed here.
    End Sub

为了澄清,我需要它在用户关闭应用程序时执行onExit;我不想通过控制台命令关闭应用程序。

我也想过也许我可以在onExit 中添加一个Handle,但我不知道在这里使用什么。

当用户试图通过标准的 Windows 资源管理器用户界面关闭应用程序时,是否可以可靠地执行子例程或函数? 这是一个控制台应用程序,我知道这可以在 Windows 窗体中很容易地完成,并且认为在控制台中会很容易。 显然不是。

【问题讨论】:

    标签: vb.net exit handle command-line-interface


    【解决方案1】:

    您需要像此示例中一样导入SetConsoleCtrlHandler

    Module Module1
        Public Declare Function SetConsoleCtrlHandler Lib "kernel32" (Handler As ConsoleCtrlDelegate, Add As Boolean) As Boolean
        Public Delegate Sub ConsoleCtrlDelegate()
        Sub Main()
            SetConsoleCtrlHandler(New ConsoleCtrlDelegate(AddressOf OnExit), True)
            Console.WriteLine("Please try to close down...")
            Console.ReadLine()
        End Sub
    
        Sub OnExit()
            MsgBox("Help I'm being closed!")
        End Sub
    End Module
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2011-12-16
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多