У меня есть консольное приложение (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
В настоящее время я не получаю ошибок, что-то не так, ниэто приложение, обрабатывающее ожидаемый обработчик в главном потоке.