以编程方式获取用户在Vb.net中激活的事件列表

时间:2017-08-10 08:45:52

标签: vb.net events error-handling

我一直试图找到一种方法来获取所有用户激活事件的列表,这样如果应用程序崩溃,它可以提供导致崩溃的所有事件的完整列表,这将有助于查找的问题。

这是否可以在不必在每个事件中手动调用某些内容?

如果我能获得类似于Visual Studio提供的列表,那将是一个很大的帮助。 enter image description here

目前,当程序崩溃时,它会调用自定义表单来通知用户;

Dim currentDomain As AppDomain = AppDomain.CurrentDomain
Private Sub MYExHandler(ByVal sender As Object,
   ByVal e As UnhandledExceptionEventArgs)
    Dim EX As Exception

    EX = e.ExceptionObject
           frm_MsgError.ErrorMsg = EX.StackTrace
    frm_MsgError.ShowDialog()
End Sub

Private Sub MYThreadHandler(ByVal sender As Object,
 ByVal e As Threading.ThreadExceptionEventArgs)
    frm_MsgError.ErrorMsg = e.Exception.StackTrace
    frm_MsgError.ShowDialog()
        End Sub

Private Sub frm_Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    AddHandler currentDomain.UnhandledException, AddressOf MYExHandler
         AddHandler Application.ThreadException, AddressOf MYThreadHandler

如果我能在这里获得列表,那就更好了。 任何意见是极大的赞赏。感谢

1 个答案:

答案 0 :(得分:0)

在这种情况下,答案遗憾的是,你想做的事情是行不通的。

要理解为什么你必须知道“事件”是什么。对于3个函数和EventHandlerList来说,事件基本上是一个很好看的语法。

3个功能是:

  • 向哈希集添加处理程序
  • 从哈希集中删除处理程序
  • 使用特定参数
  • 调用哈希集内的所有处理程序

没有更多的东西了。如果您使用Custom关键字声明活动,则可以自行实施这些功能。

这意味着所有事件处理程序甚至所有事件使用的任何常用函数都没有神奇的中央存储。每个活动都是孤立的。

话虽如此,有一种方法可以获取单个类/实例的所有事件并附加到它们。这可以通过调用类类型的GetEvents方法来完成。您获得的列表包含EventDescriptor个对象,这些对象提供您需要附加到事件的AddHandler方法。

虽然无法附加到整个.NET运行时中的所有事件,但您可以附加到特定对象的事件。

我希望有所帮助。