不使用Dispose事件处理程序处理应用程序关闭事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不使用Dispose事件处理程序处理应用程序关闭事件相关的知识,希望对你有一定的参考价值。

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

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

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

不叫。

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

有没有办法处理这种关闭应用程序事件?

答案

在您的应用程序只是关闭的正常情况下,您可以订阅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文档。这个解决方案的棘手部分是传递其他应用程序关闭文档所需的信息。

以上是关于不使用Dispose事件处理程序处理应用程序关闭事件的主要内容,如果未能解决你的问题,请参考以下文章

处理 WPF 用户控件

java之十二 事 件 处 理

关闭 Chrome 窗口未在卸载事件处理程序中使用 sendBeacon 发送数据

处理 WebSocket 的类 close 和 dispose (Observable.Using)

关闭事件处理程序 C#

文件事件处理器