轉
像QQ那樣,當程式出現崩潰強制退出之前,捕獲該異常,跳出友好介面進行提示。只需在Program.cs 裡加相關代碼即可實現,全域任何一個點出現崩潰,都將在這裡被捕獲。
static class Program
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static void Main()
{
try
{
//處理未捕獲的異常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//處理UI線程異常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//處理非UI線程異常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmlogin());
}
catch(Exception ex)
{
frmBug f = new frmBug(ex.Message);//友好提示介面
f.ShowDialog();
}
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
string str = "";
Exception error = e.Exception as Exception;
if (error != null)
{
str =string.Format("出現應用程式未處理的異常\n異常類型:{0}\n異常訊息:{1}\n異常位置:{2}\n",
error.GetType().Name, error.Message, error.StackTrace);
}
else
{
str =string.Format("應用程式線程錯誤:{0}", e);
}
frmBug f = new frmBug(str);//友好提示介面
f.ShowDialog();
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string str = "";
Exception error = e.ExceptionObject as Exception;
if (error != null)
{
str =string.Format("Application UnhandledException:{0};\n堆棧資訊:{1}", error.Message, error.StackTrace);
}
else
{
str =string.Format("Application UnhandledError:{0}", e);
}
frmBug f = new frmBug(str);//友好提示介面
f.ShowDialog();
}
}