-1

我希望能够捕获程序的每个异常并将其显示在 MessageBox 中,而不是让程序只说“已停止工作”。

出于某种原因 - 每次软件出现故障时 - 程序都会说停止工作。我希望能够在 MessageBox 中显示它,就像在 Visual Studio 中一样。这怎么可能?

C# WinForms。

4

5 回答 5

2

订阅 ThreadException 和 CurrentDomain.UnhandledException

static void Main(){
    Application.ThreadException += ApplicationThreadException;
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
}
static void ApplicationThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    ShowGenericErrorMessage();
}
static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    ShowGenericErrorMessage();
}
于 2013-09-24T07:03:45.513 回答
0

尝试类似:

public Form1()
        {
            InitializeComponent();
            AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;
        }

        private void HandleUnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            MessageBox.Show("Exception {0} was thrown", e.ToString());
        }
于 2013-09-24T07:07:05.883 回答
0

Global.asax中的 Application_Error 方法是你抓住的最后机会:

protected void Application_Error(Object sender, EventArgs e)
于 2013-09-24T07:03:57.583 回答
0

尝试这个:

try
{
\\Code block
}

catch(Exception ex)
{
\\the object ex has details about the exception use it display the error in msg box
}

此外,此链接简单地解释了异常处理:http: //www.dotnetperls.com/exception

于 2013-09-24T07:09:03.880 回答
0

创建一个未处理的异常处理程序,如下所示:

static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
    Exception ex = (Exception)args.ExceptionObject;

    UtilGui.LogException(ex);
}

static void ApplicationThreadUnhandledExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs args)
{
    Exception ex = (Exception)args.Exception;

    UtilGui.LogException(ex);
}

并将其注册到您的Main方法中,如下所示:

// Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException += new ThreadExceptionEventHandler(ApplicationThreadUnhandledExceptionHandler);

// Set the unhandled exception mode to force all Windows Forms 
// errors to go through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Add the event handler for handling non-UI thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomainUnhandledExceptionHandler);
于 2013-09-24T07:14:45.183 回答