Предотвращение сбоев с использованием UnhandledExceptionHandler - PullRequest
0 голосов
/ 09 марта 2019

Предисловие: я прекрасно знаю, насколько плохо это делается, мне просто интересно, почему это работает

Я видел этот фрагмент кода при просмотре вопросов, связанных с UnhandledException, и удивлялся, почему вызов Thread.CurrentThread.Join() в обработчике предотвращает сбой приложения, и что означает в этом сценарии поток, вызывающий Join(), сам по себе?

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException
Public Sub UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
    Console.WriteLine($"[ERROR] {DirectCast(e.ExceptionObject, Exception).Message}")
    'Thread.CurrentThread.IsBackground = True
    Thread.CurrentThread.Join()
End Sub

Я также заметил, что, хотя этот обработчик действительно предотвращает сбой приложения, он, похоже, оставляет потоки в каком-то неизвестном / работающем состоянии (я имею в виду, что в данный момент все находится в неопределенном состоянии, но все же), что означает раскомментирование Thread.CurrentThread.IsBackground = True позволяет приложению завершать работу после завершения основного потока.

Public Sub Main()
    Application.EnableVisualStyles()
    Application.SetCompatibleTextRenderingDefault(False)

    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException

    Application.Run(New Form1) ' Form1 has a button that starts a thread which throws an exception
    ' This is only reached when Form1 is closed, but if there is
    ' no Thread.CurrentThread.IsBackground = True the app keeps running
    ' in the background because the other threads are still running or in
    ' an alive-ish state
End Sub

tl; dr : Почему вызов Thread.CurrentThread.Join() в UnhandledExceptionHandler предотвращает сбой приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...