A:增减错误处理

D:调整公共项目
This commit is contained in:
jimmy committed 2025-05-27 23:05:20 +08:00
1 parent 67889796ed
commit 2831deffe3
12 files changed
+120 -109

No files matched your search

+32 -58
View File
@@ -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 实现
}
}