Я предполагаю, что вы пишете приложение для Windows, и в этом случае да , вы можете сделать это. Я оставлю права и недостатки того, стоит ли вам это делать другим. На этот счет уже есть достаточно ответов, и я предлагаю вам внимательно их рассмотреть, прежде чем вы действительно сделаете это .
Обратите внимание, что этот код будет вести себя в отладчике иначе, чем при непосредственном запуске приложения (возможно, еще одна причина этого не делать). Чтобы приложение показывало окно сообщения и затем продолжало работу, вам нужно будет запустить приложение из проводника, а не из Visual Studio.
Создайте новое приложение для форм Windows. Код в Program.cs выглядит примерно так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
namespace WindowsFormsApplication2 {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form1 = new Form1();
Application.ThreadException += new ThreadExceptionEventHandler(form1.UnhandledThreadExceptionHandler);
Application.Run(form1);
}
}
}
Затем код в Form1 будет выглядеть примерно так:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace WindowsFormsApplication2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
public void UnhandledThreadExceptionHandler(object sender, ThreadExceptionEventArgs e) {
this.HandleUnhandledException(e.Exception);
}
public void HandleUnhandledException(Exception e) {
// do what you want here.
if (MessageBox.Show("An unexpected error has occurred. Continue?",
"My application", MessageBoxButtons.YesNo, MessageBoxIcon.Stop,
MessageBoxDefaultButton.Button2) == DialogResult.No) {
Application.Exit();
}
}
private void button1_Click(object sender, EventArgs e) {
throw new ApplicationException("Exception");
}
}
}
(добавить button1 к форме и прикрепить ее button1_Click.)