AppDomain.CurrentDomain.UnhandledException not firing without debugging

前端 未结 2 1949
梦如初夏
梦如初夏 2020-12-23 22:31

I have a .NET program with an event handler bound to Application.CurrentDomain.UnhandledException. When running the program with debugging, this event fires when an unhandle

相关标签:
2条回答
  • 2020-12-23 23:15

    Maybe the exception is thrown within a separate thread in your application. We've seen the problem of an application just "stopping" (means: one second it's there, the other second it's gone) when an unhandled exception occurs within a thread. In that case, not even the unhandled exception handler got triggered.

    0 讨论(0)
  • 2020-12-23 23:22

    I assume you have not set the correct exception handling mode using Application.SetUnhandledExceptionMode() - just set it to UnhandledExceptionMode.ThrowException.

    UPDATE

    I just wrote a small test application and found nothing to work unexscpected. Could you try to reproduce your error with this test code?

    using System;
    using System.Drawing;
    using System.Threading;
    using System.Windows.Forms;
    
    namespace ConsoleApplication
    {
        public static class Program
        {
            static void Main()
            {
                AppDomain.CurrentDomain.UnhandledException += AppDomain_UnhandledException;
    
                Application.ThreadException += Application_ThreadException;
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    
                Application.Run(new TestForm());
    
                throw new Exception("Main");
            }
    
            static void Application_ThreadException(Object sender, ThreadExceptionEventArgs e)
            {
                MessageBox.Show(e.Exception.Message, "Application.ThreadException");
            }
    
            static void AppDomain_UnhandledException(Object sender, UnhandledExceptionEventArgs e)
            {
                MessageBox.Show(((Exception)e.ExceptionObject).Message, "AppDomain.UnhandledException");
            }
        }
    
        public class TestForm : Form
        {
            public TestForm()
            {
                this.Text = "Test Application";
                this.ClientSize = new Size(200, 60);
                this.MinimumSize = this.Size;
                this.MaximumSize = this.Size;
                this.StartPosition = FormStartPosition.CenterScreen;
    
                Button btnThrowException = new Button();
    
                btnThrowException.Text = "Throw";
                btnThrowException.Location = new Point(0, 0);
                btnThrowException.Size = new Size(200, 30);
                btnThrowException.Click += (s, e) => { throw new Exception("Throw"); };
    
                Button btnThrowExceptionOnOtherThread = new Button();
    
                btnThrowExceptionOnOtherThread.Text = "Throw on other thread";
                btnThrowExceptionOnOtherThread.Location = new Point(0, 30);
                btnThrowExceptionOnOtherThread.Size = new Size(200, 30);
                btnThrowExceptionOnOtherThread.Click += (s, e) => new Thread(() => { throw new Exception("Other thread"); }).Start();
    
                this.Controls.Add(btnThrowException);
                this.Controls.Add(btnThrowExceptionOnOtherThread);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题