我有一個控制檯應用程序(VB.NET)。當它啓動時,它會派生工作線程來查找數據庫中的工作並執行任務,然後查找下一個任務(基本上,工作流程)。如何捕捉可以被主線程監視的多線程應用程序中的事件?
我遇到的問題是我在生成工作線程的主線程中有我的事件處理程序。那些工作人員,如果他們錯誤的話,會向公衆代表舉辦一個活動。然而,我的主線沒有檢測到這些事件,我無法弄清楚如何製作它。我的意圖是執行所有日誌記錄(文本/數據庫),電子郵件警報,並重新啓動工作人員以查找另一個未出錯的任務。 (這將在LogErrorMessage例程中進行擴展,現在我只保留一個簡單的Console.Writeline,以便我可以看到該方法是否被觸發)
可以這樣做嗎?如果是的話......我錯過了什麼?
這裏是圍繞什麼,我試圖做的代碼:
記錄器類:
Public Delegate Sub LogDelegateError(ByVal Ex As Exception)
Public Class EventLogger
Public Event EventError As LogDelegateError
Public Sub New()
End Sub
Public Sub LogError(ByVal ex As Exception)
RaiseEvent EventError(ex)
End Sub
End Class
主線:
Private WithEvents _ErrorLogger As EventLogger
Public Sub Process()
_ErrorLogger = New EventLogger
AddHandler _ErrorLogger.EventError, New LogDelegateError(AddressOf LogErrorMessage)
[Loop]
Dim tWorker As Thread = New Thread(AddressOf oWorker.MainProcess)
tWorker.Priority = WorkerNode.Attributes(SETTING_NAME_PRIORITY).Value
tWorker.Start()
[End Loop]
[In Finally]
RemoveHandler _ErrorLogger.EventError, New LogDelegateError(AddressOf LogErrorMessage)
End Sub
Private Sub LogErrorMessage(ByVal ex As Exception) Handles _ErrorLogger.EventError
Console.WriteLine()
Console.WriteLine("INTERNAL ERROR:")
Console.WriteLine(ex.ToString())
Console.WriteLine()
End Sub
WorkerBase:
Private _Log As New EventLogger
Public Sub MainProcess()
Try
[SOME WORK]
Catch ex As Exception
Me._Log.LogError(ex)
End Try
End Sub
我目前沒有發現有什麼錯誤的錯誤,應用程序也沒有在主線程中擊中預期的處理程序。
C#很好,我更喜歡它,僱主選擇VB出於某種原因。讓我試試這個! – RiddlerDev
該事件將被提出並處理,儘管它不會在主線程中處理,而會在提升它的線程中處理。 –
@Yann,那很好。 @克里斯,工作!謝謝。 – RiddlerDev