如何处理在新对象上有异常的自定义事件

时间:2015-01-15 00:20:04

标签: asp.net vb.net exception-handling event-handling

我正在创建一个新对象,它将字符串值作为唯一的构造函数传递。

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

逻辑上和语法上,我认为它有意义,但没有显示任何内容,并显示异常错误。

我在引用事件处理程序时做错了什么?

2 个答案:

答案 0 :(得分:0)

您正在构造函数中引发事件,但是在构造函数完成之后才会附加事件处理程序,因此在您开始侦听它时,事件已经过去了。对于事件没有办法解决问题,因为在对对象进行引用之前无法处理对象的事件,在构造函数完成之前,您无法对该对象进行引用。您需要在构造函数中设置属性,然后在创建对象后对其进行测试。

答案 1 :(得分:0)

首先,在连接错误事件之前,在代码中调用构造函数。从理论上讲,如果初始化构造函数时出错,则不会触发该事件。

我会考虑将连接开口移动到Open子区域。这样,在初始化对象后,您可以连接事件,然后调用open(就像IDbConnection一样,虽然它只是抛出一个Exception并且不会引发任何事件)。