[英]Raise exception in function call when event is triggered
我有一個VB.NET類Flasher
用於通過.Flash()
方法刷新具有某些固件的設備。 但是,在刷新過程中可能會發生錯誤,在這種情況下將觸發事件。 我無法弄清楚如何處理此事件並在.Flash()
的調用堆棧中引發異常。
Class Flasher
Private myDevice As New FlashLib.Device
Public Function Flash() As String
AddHandler myDevice.ErrorEvent, AddressOf OnError
'... Do flashing stuff here that might send our `ErrorEvent` ...'
myDevice.flash_firmware("myfirmware.fw")
myDevice.restart()
Threading.Thread.Sleep(5000)
return "OK"
End Function
Public Sub OnError(ByRef Err As ErrEventArgs)
errMsg = String.Format(
"Device threw an error during flashing process. Type: {0}",
Err.error)
Throw New System.Exception(errMsg)
End Sub
Flasher
類取決於C#庫FlashLib
,它是ErrorEvent
的始發者:
namespace FlashLib
{
public delegate void ErrorEventHandler(ErrEventArgs err);
public interface Device
{
event ErrorEventHandler ErrorEvent;
}
}
問題是當我實例化Flasher
並調用.Flash()
,想法是如果發生錯誤事件, .Flash()
的調用者將引發異常,但是在.Flash()
執行的中間跳出的是該函數並進入OnError()
。 我的catch
子句未捕獲從此處引發異常的情況:
Dim flasher As New Flasher
Try
flasher.Flash()
Catch
Debug.Print("There was a problem with flashing")
End Try
相反,異常上升到頂部,並且顯示錯誤消息框。 然后,從Flash()
方法中中斷的地方繼續執行並繼續執行。 似乎VB.NET中的事件的行為就像軟件中斷一樣:跳出您在處理程序中所做的任何操作,然后恢復之前的狀態? 我需要Flash()
的調用方能夠在觸發ErrorEvent
時捕獲異常。
不是讓您的OnError
方法拋出異常,而是讓它設置一個可以在Flash
測試的標志,然后在發現異常的情況下拋出該異常。 例如
Class Flasher
Private myDevice As New FlashLib.Device
Private errMsg As String
Public Function Flash() As String
AddHandler myDevice.ErrorEvent, AddressOf OnError
'... Do flashing stuff here that might send our `ErrorEvent` ...'
If errMsg IsNot Nothing Then
Throw New System.Exception(errMsg)
End If
myDevice.flash_firmware("myfirmware.fw")
myDevice.restart()
Threading.Thread.Sleep(5000)
return "OK"
End Function
Public Sub OnError(ByRef Err As ErrEventArgs)
errMsg = String.Format(
"Device threw an error during flashing process. Type: {0}",
Err.error)
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.