2015-01-15 59 views
0

我創建傳遞一個字符串值作爲唯一的構造一個新的對象異常自定義事件。如何處理這對新的對象

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 

在我的頁面調用控件,我創建對象,申報聽者

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 

從邏輯上和語法上看,我認爲它是有道理的,但沒有任何顯示,並且顯示異常錯誤。

我做得不對的事件處理程序的參考?

+0

我看不出有任何異常處理 –

回答

0

首先,調用構造函數在代碼中你已經連接好連接錯誤事件之前。理論上,如果初始化構造函數時發生錯誤,則不會觸發該事件。

我會考慮移動連接通向開放式子。這樣,在初始化對象之後,您可以連接事件,然後調用打開(很像IDbConnection,儘管它只是拋出一個Exception並且不會引發任何事件)。

+0

那麼如何處理Exceptions的最佳方法,而不是在Web應用程序中死亡的黃色屏幕呢?最好是把它放在Try ... Catch ..最後。並添加一個屬性IsConnected來測試連接是否工作? – user4444444

0

你提出在構造函數中的事件,但不重視的事件處理程序,直到構造完成後,讓該事件已經到來,並通過你開始監聽它的時候了。在事件發生的時候沒有辦法解決這個問題,因爲除非你有一個對象的引用,否則在構造函數完成之前你不能擁有對象的事件。您需要在構造函數中設置屬性,然後在創建對象後對其進行測試。

+0

所以我是對是說有在.NET景觀環境沒有辦法有一個構造函數方法的處理程序沒有參考呢? – user4444444

+0

你剛剛問了什麼沒有任何實際意義,但我會重申,你不能處理一個不存在的對象的事件,並且一個對象在構造函數完成之前不存在。 – jmcilhinney