如何处理对新对象有异常的自定义事件
How to Handle custom event which has exception on new object
我正在创建一个将字符串值作为唯一构造函数传递的新对象。
Dim o As New Widget("widgetname")
在我的 Widget 构造函数中,发生了一个异常,我引发了一个事件和事件处理程序。
Public Class Widget
Public Event ConnectionException As EventHandler
Sub New(ByVal name As String)
_name= f
RaiseEvent ConnectionException(Me, New EventArgs())
End Sub
End Class
在调用 Widget 的页面上,我创建了对象,声明了监听器
Dim o = New Widget("widgetname")
AddHandler o.ConnectionException, AddressOf ConnectionError
和处理例程。
Sub ConnectionError(ByVal sender As Object, ByVal e As EventArgs)
Response.Write("Computer says no.")
End Sub
从逻辑上和语法上,我觉得有道理但是没有显示,显示异常错误。
我是不是在引用事件处理程序时做错了什么?
您正在构造函数中引发事件,但直到构造函数完成后才附加事件处理程序,因此在您开始侦听事件时事件已经来去去去。对于事件,没有办法解决这个问题,因为在您拥有对该对象的引用之前您无法处理该对象的事件,而在构造函数完成之前您无法拥有该对象。您需要在构造函数中设置一个 属性,然后在创建对象后对其进行测试。
首先,在连接错误事件之前在您的代码中调用构造函数。理论上,如果初始化构造函数出错,则不会触发该事件。
我会考虑将连接打开移动到打开子。这样,在初始化对象后,您可以连接事件,然后调用打开(很像 IDbConnection 的工作方式,尽管它只是抛出异常并且不会引发任何事件)。
我正在创建一个将字符串值作为唯一构造函数传递的新对象。
Dim o As New Widget("widgetname")
在我的 Widget 构造函数中,发生了一个异常,我引发了一个事件和事件处理程序。
Public Class Widget
Public Event ConnectionException As EventHandler
Sub New(ByVal name As String)
_name= f
RaiseEvent ConnectionException(Me, New EventArgs())
End Sub
End Class
在调用 Widget 的页面上,我创建了对象,声明了监听器
Dim o = New Widget("widgetname")
AddHandler o.ConnectionException, AddressOf ConnectionError
和处理例程。
Sub ConnectionError(ByVal sender As Object, ByVal e As EventArgs)
Response.Write("Computer says no.")
End Sub
从逻辑上和语法上,我觉得有道理但是没有显示,显示异常错误。
我是不是在引用事件处理程序时做错了什么?
您正在构造函数中引发事件,但直到构造函数完成后才附加事件处理程序,因此在您开始侦听事件时事件已经来去去去。对于事件,没有办法解决这个问题,因为在您拥有对该对象的引用之前您无法处理该对象的事件,而在构造函数完成之前您无法拥有该对象。您需要在构造函数中设置一个 属性,然后在创建对象后对其进行测试。
首先,在连接错误事件之前在您的代码中调用构造函数。理论上,如果初始化构造函数出错,则不会触发该事件。
我会考虑将连接打开移动到打开子。这样,在初始化对象后,您可以连接事件,然后调用打开(很像 IDbConnection 的工作方式,尽管它只是抛出异常并且不会引发任何事件)。