我一直试图找到一种方法来获取所有用户激活事件的列表,这样如果应用程序崩溃,它可以提供导致崩溃的所有事件的完整列表,这将有助于查找的问题。
这是否可以在不必在每个事件中手动调用某些内容?
如果我能获得类似于Visual Studio提供的列表,那将是一个很大的帮助。
目前,当程序崩溃时,它会调用自定义表单来通知用户;
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
如果我能在这里获得列表,那就更好了。 任何意见是极大的赞赏。感谢
答案 0 :(得分:0)
在这种情况下,答案遗憾的是,你想做的事情是行不通的。
要理解为什么你必须知道“事件”是什么。对于3个函数和EventHandlerList
来说,事件基本上是一个很好看的语法。
3个功能是:
没有更多的东西了。如果您使用Custom
关键字声明活动,则可以自行实施这些功能。
这意味着所有事件处理程序甚至所有事件使用的任何常用函数都没有神奇的中央存储。每个活动都是孤立的。
话虽如此,有一种方法可以获取单个类/实例的所有事件并附加到它们。这可以通过调用类类型的GetEvents
方法来完成。您获得的列表包含EventDescriptor
个对象,这些对象提供您需要附加到事件的AddHandler
方法。
虽然无法附加到整个.NET运行时中的所有事件,但您可以附加到特定对象的事件。
我希望有所帮助。