Я немного изучаю, как обрабатываются необработанные исключения в .Net, и я получаю неожиданные результаты, которыми я хотел бы поделиться с вами, чтобы узнать, что вы думаете.
Первоеодин довольно просто увидеть.Я написал этот код для выполнения теста, просто кнопку, которая вызывает исключение в том же потоке, который создал форму:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Throw New Exception()
End Sub
Private Sub UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
MsgBox(String.Format("Exception: {0}. Ending: {1}. AppDomain: {2}", CType(e.ExceptionObject, Exception).Message, e.IsTerminating.ToString(), AppDomain.CurrentDomain.FriendlyName))
End Sub
Private Sub UnhandledThreadException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
MsgBox(String.Format("Exception: {0}. AppDomain: {1}", e.Exception.Message(), AppDomain.CurrentDomain.FriendlyName))
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException
AddHandler Application.ThreadException, AddressOf UnhandledThreadException
End Sub
End Class
Когда я выполняю код внутри Visual Studio, UnhandledException вызывается, как и ожидалось, нокогда я запускаю приложение из Windows, вместо этого вызывается UndhanledThreadException.¿? ¿? ¿¿? ¿?
Кто-то знает, что здесь может происходить?
Заранее спасибо.
РЕДАКТИРОВАТЬ: После прочтения ПриложениеДокументация .ThreadException выглядит как Application.ThreadException, когда исключения возникают в «потоках Windows Forms» (какими бы они ни были, IMHO, в каждом приложении есть только один поток Windows Form).Таким образом, Application.ThreadException относится к исключениям, создаваемым потоком, который создал форму вашего приложения, а другие исключения обрабатываются AppDomain.CurrentDomain.UnhandledException.