1.在App.xaml
中增加DispatcherUnhandledException
处理消息
<Application x:Class="SmartMeasureSystem.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SmartMeasureSystem"
StartupUri="MainWindow.xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException">
<!--其他代码-->
</Application >
2.在App.xaml.cs
中实现未捕捉异常处理
private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
e.Handled = true;//无此语句, 软件将崩溃
var dtNow = DateTime.Now;
var sFile = $"{AppDomain.CurrentDomain.BaseDirectory}{dtNow.ToString("yyyyMMdd HHmmss")}.txt";
FileStream fs = new FileStream(sFile, FileMode.Create);
var utf8Enc = new UTF8Encoding();
Action<string, bool> writeStr = (src, indent) =>
{
if (indent)
{
src = Regex.Replace(src, "^", " ");
}
byte[] aData = utf8Enc.GetBytes(src);
string sNewLine = "\r\n";
fs.Write(aData, 0, aData.Length);
aData = utf8Enc.GetBytes(sNewLine);
fs.Write(aData, 0, aData.Length);
};
writeStr("错误信息:", false);
writeStr(e.Exception.Message, true);
writeStr("调用堆栈:", false);
writeStr(e.Exception.StackTrace, true);
if (e.Exception.InnerException != null)
{
writeStr("内部错误信息:", false);
writeStr(e.Exception.InnerException.Message, true);
writeStr("内部错误调用堆栈:", false);
writeStr(e.Exception.InnerException.StackTrace, true);
}
fs.Close();
MessageBox.Show(e.Exception.Message, "未处理异常", MessageBoxButton.OK, MessageBoxImage.Error);
}
注意e.Handled = true;
语句,可以防止软件崩溃