在做一些应用中,根据实际的需求情况,网上也收了些资料。这个对查找程序中的bug及出现的一些问题能很好排查,找到问题原因!自己记录下
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
LogHepler log = new LogHepler();
try
{
//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
#region Program.cs自动生成的代码
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
CultureInfo ci = new CultureInfo("zh-hans");
Application.CurrentCulture = ci;
DevExpress.UserSkins.BonusSkins.Register();
DevExpress.Skins.SkinManager.EnableMdiFormSkins();
UserLookAndFeel.Default.SetSkinStyle(Properties.Settings.Default.Theme);
DevExpress.Skins.SkinManager.EnableFormSkins();
DialogResult result = DialogResult.None;
using (frmLogin fl = new frmLogin())
{
result = fl.ShowDialog();
if (result == DialogResult.OK)
{
SplashScreenManager.ShowForm(null, typeof(frmSplash), true, true, false, 1000);
for (int i = 1; i <= 100; i++)
{
SplashScreenManager.Default.SendCommand(frmSplash.SplashScreenCommand.SetProgress, i);
Thread.Sleep(30);
}
SplashScreenManager.CloseForm(false);
Application.Run(new MainForm());
}
else
{
Application.Exit();
}
}
#endregion
}
catch (Exception ex)
{
string str = "";
string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
if (ex != null)
{
str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",
ex.GetType().Name, ex.Message, ex.StackTrace);
}
else
{
str = string.Format("应用程序线程错误:{0}", ex);
}
MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
log.WriteLog(str);
}
}
#region 捕捉全局异常代码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
LogHepler log = new LogHepler();
string str = "";
string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
Exception error = e.Exception as Exception;
if (error != null)
{
str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",
error.GetType().Name, error.Message, error.StackTrace);
}
else
{
str = string.Format("应用程序线程错误:{0}", e);
}
DevExpress.XtraEditors.XtraMessageBox.Show(UserLookAndFeel.Default, error.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
//MessageBox.Show(error.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
log.WriteLog(str);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
LogHepler log = new LogHepler();
string str = "";
Exception error = e.ExceptionObject as Exception;
string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
if (error != null)
{
str = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}", error.Message, error.StackTrace);
}
else
{
str = string.Format("Application UnhandledError:{0}", e);
}
MessageBox.Show(error.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
log.WriteLog(str);
}
#endregion
}
日志帮助类public class LogHepler
{
/// <summary>
/// 锁对象
/// </summary>
private static object lockHelper = new object();
/// <summary>
/// 写error级别日志
/// </summary>
/// <param name="errorMessage">异常信息</param>
/// <param name="ex">异常类</param>
public void WriteErrorLog(string errorMessage, Exception ex)
{
string errorMsg = string.Empty;
if (ex.InnerException != null)
{
errorMsg = ex.InnerException.Message;
}
errorMsg = errorMsg + errorMessage + ex.StackTrace;
WriteLog(errorMsg);
}
/// <summary>
/// 写日志
/// </summary>
/// <param name="msg">日志信息</param>
public void WriteLog(string msg)
{
lock (lockHelper)
{
string FilePath = string.Empty;
string AbsolutePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Log";
if (!Directory.Exists(AbsolutePath))
{
Directory.CreateDirectory(AbsolutePath);
}
FilePath = AbsolutePath + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
File.AppendAllText(FilePath, "\r\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + msg, Encoding.GetEncoding("gb2312"));
}
}
}