A:增减错误处理
D:调整公共项目
This commit is contained in:
1 parent
67889796ed
commit
2831deffe3
12 files changed
+120
-109
No files matched your search
+32
-58
@@ -4,6 +4,7 @@ using System.Net.Http;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
using Application.Utils;
|
||||
using Common.Logger;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Shell;
|
||||
@@ -15,25 +16,43 @@ public partial class App : System.Windows.Application
|
||||
{
|
||||
protected override void OnStartup(StartupEventArgs e)
|
||||
{
|
||||
// 注册全局异常处理
|
||||
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
|
||||
|
||||
// 异常处理
|
||||
ExceptionCatch();
|
||||
base.OnStartup(e);
|
||||
|
||||
// ✅ 启动你的服务(如 WebSocket、HTTP、端口监听等)
|
||||
StartMyServer();
|
||||
}
|
||||
/// <summary>
|
||||
/// 异常捕捉
|
||||
/// </summary>
|
||||
private void ExceptionCatch()
|
||||
{
|
||||
DispatcherUnhandledException += App_DispatcherUnhandledException;
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
// 注册全局异常处理
|
||||
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
|
||||
|
||||
// 启动主窗口
|
||||
MainWindow mainWindow = new MainWindow();
|
||||
mainWindow.Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理异常
|
||||
/// </summary>
|
||||
/// <param name="exception"></param>
|
||||
private void HandleException(Exception? exception)
|
||||
{
|
||||
Log.Error("未捕获异常", exception);
|
||||
// 错误记录,错误处理
|
||||
if (exception != null)
|
||||
{
|
||||
// todo:2023年10月29日 恭喜你发现了BUG页面
|
||||
MessageBox.Show($"恭喜你发现了BUG,请联系管理员解决:{exception.Message}");
|
||||
}
|
||||
}
|
||||
private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
|
||||
{
|
||||
LogException(e.Exception, "UI线程异常");
|
||||
|
||||
Log.Error(e.Exception, "UI线程异常");
|
||||
HandleException(e.Exception);
|
||||
// 根据异常类型决定是否继续运行
|
||||
if (CanRecover(e.Exception))
|
||||
{
|
||||
@@ -50,7 +69,7 @@ public partial class App : System.Windows.Application
|
||||
{
|
||||
foreach (var ex in e.Exception.InnerExceptions)
|
||||
{
|
||||
LogException(ex, "Task未观察异常");
|
||||
Log.Error(e.Exception, "UI线程异常");
|
||||
}
|
||||
|
||||
e.SetObserved(); // 标记异常已被观察,防止应用终止
|
||||
@@ -59,13 +78,13 @@ public partial class App : System.Windows.Application
|
||||
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
var exception = e.ExceptionObject as Exception;
|
||||
LogException(exception, "非UI线程异常");
|
||||
Log.Error(exception, "非UI线程异常");
|
||||
|
||||
if (e.IsTerminating)
|
||||
{
|
||||
// 应用即将终止,进行紧急清理
|
||||
// EmergencyCleanup();
|
||||
// LogCritical("应用程序即将因未处理异常而终止");
|
||||
Log.Fatal("应用程序即将因未处理异常而终止");
|
||||
}
|
||||
}
|
||||
private bool CanRecover(Exception exception)
|
||||
@@ -83,49 +102,6 @@ public partial class App : System.Windows.Application
|
||||
};
|
||||
}
|
||||
|
||||
private void LogException(Exception exception, string context)
|
||||
{
|
||||
// var logLevel = GetLogLevel(exception);
|
||||
// var logMessage = $"[{context}] {exception.GetType().Name}: {exception.Message}\n{exception.StackTrace}";
|
||||
//
|
||||
// // 使用日志框架记录
|
||||
// Logger<>.Log(logLevel, logMessage);
|
||||
//
|
||||
// // 严重异常时发送邮件或其他通知
|
||||
// if (logLevel == LogLevel.Critical)
|
||||
// {
|
||||
// NotifyDevelopers(exception, context);
|
||||
// }
|
||||
}
|
||||
// 对于async/await操作,确保正确处理异常
|
||||
public async Task<T> SafeExecuteAsync<T>(Func<Task<T>> operation, T defaultValue = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await operation();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex, "异步操作异常");
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
// 对于Fire-and-Forget的Task,确保异常被捕获
|
||||
public void SafeFireAndForget(Func<Task> operation)
|
||||
{
|
||||
Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await operation();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex, "后台任务异常");
|
||||
}
|
||||
});
|
||||
}
|
||||
private void StartMyServer()
|
||||
{
|
||||
int port = SysHelper.GetAvailablePort();
|
||||
@@ -138,10 +114,8 @@ public partial class App : System.Windows.Application
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void StartWebSocketServer(int port)
|
||||
{
|
||||
// 示例服务逻辑,如上文 WebSocket 实现
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user