代码之家  ›  专栏  ›  技术社区  ›  Simo

在不处理事件处理程序的情况下处理应用程序关闭事件

  •  1
  • Simo  · 技术社区  · 7 年前

    我想知道是否有可能不使用Dispose事件处理程序在Visual Studio 2008中处理关闭的应用程序。

    如果我的应用程序崩溃或在运行时关闭它:

    Private Sub Foo_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed

    不被调用。

    这会导致一个严重的问题,因为我目前正在处理多个Excel文件,它们在应用程序崩溃后保持打开状态,或者在运行时关闭它。

    是否有方法处理此类关闭应用程序事件?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Visual Vincent    7 年前

    在正常情况下,当您的应用程序只是关闭时,您可以订阅 MyApplication.Shutdown event 关闭Excel文档。

    可通过以下步骤订阅事件:

    1. 在中右键单击项目 Solution Explorer 新闻界 Properties .

    2. Application 窗框和印刷机 View Application Events .

    3. 在打开的文件中,要么自己编写事件处理程序,要么让vs先选择 (MyApplication Events) 在文本编辑器上方的左侧组合框中,然后选择 Shutdown 在右组合框中。

    现在您应该有一个类似于下面的事件处理程序。去那里清理一下吧:

    Private Sub MyApplication_Shutdown(sender As Object, e As System.EventArgs) Handles Me.Shutdown
        'Do your cleanup here...
    End Sub
    

    对于由clr异常引起的应用程序崩溃,可以使用 AppDomain.UnhandledException event 但对于更严重的车祸来说,你做不到什么。

    解决方法是创建另一个监视主应用程序的应用程序。当其他应用程序检测到主应用程序的进程已终止时,它将关闭Excel文档。这个解决方案的棘手部分是传递其他应用程序关闭文档所需的信息。