using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Windows.Input;
using NavisworksTransport.UI.WPF.ViewModels;
using NavisworksTransport.UI.WPF.Collections;
using NavisworksTransport.Core;
using NavisworksTransport.Utils;
using NavisworksTransport.Commands;
namespace NavisworksTransport.UI.WPF.ViewModels
{
///
/// 系统管理ViewModel - 处理插件系统管理功能
///
public class SystemManagementViewModel : ViewModelBase, IDisposable
{
#region 私有字段
private readonly UIStateManager _uiStateManager;
// 系统管理相关字段
private bool _isAutoSaveEnabled = true;
private bool _isDebugModeEnabled = false;
// 网格可视化开关字段
private bool _showWalkableGrid = false;
private bool _showObstacleGrid = false;
private bool _showUnknownGrid = false;
private ObservableCollection _logLevels;
private string _selectedLogLevel = "Info";
private string _pluginVersion = "v1.0";
private string _navisworksVersion = "2026";
private string _memoryUsage = "0 MB";
private string _runningTime = "00:00:00";
// 🔧 修复:添加定时器字段以便在清理时停止
// 性能监控相关字段 (已改为Idle事件管理)
private DateTime _lastPerformanceUpdate = DateTime.MinValue;
private DateTime _startTime;
// 🔧 修复:添加释放状态标志
private bool _disposed = false;
#endregion
#region 公共属性
///
/// 是否启用自动保存
///
public bool IsAutoSaveEnabled
{
get => _isAutoSaveEnabled;
set => SetProperty(ref _isAutoSaveEnabled, value);
}
///
/// 是否启用调试模式
///
public bool IsDebugModeEnabled
{
get => _isDebugModeEnabled;
set => SetProperty(ref _isDebugModeEnabled, value);
}
///
/// 是否显示可通行网格点
///
public bool ShowWalkableGrid
{
get => _showWalkableGrid;
set
{
if (SetProperty(ref _showWalkableGrid, value))
{
OnGridVisualizationChanged();
}
}
}
///
/// 是否显示障碍物网格点
///
public bool ShowObstacleGrid
{
get => _showObstacleGrid;
set
{
if (SetProperty(ref _showObstacleGrid, value))
{
OnGridVisualizationChanged();
}
}
}
///
/// 是否显示未知区域网格点
///
public bool ShowUnknownGrid
{
get => _showUnknownGrid;
set
{
if (SetProperty(ref _showUnknownGrid, value))
{
OnGridVisualizationChanged();
}
}
}
///
/// 日志级别集合
///
public ObservableCollection LogLevels
{
get => _logLevels;
set => SetProperty(ref _logLevels, value);
}
///
/// 选中的日志级别
///
public string SelectedLogLevel
{
get => _selectedLogLevel;
set => SetProperty(ref _selectedLogLevel, value);
}
///
/// 插件版本
///
public string PluginVersion
{
get => _pluginVersion;
set => SetProperty(ref _pluginVersion, value);
}
///
/// Navisworks版本
///
public string NavisworksVersion
{
get => _navisworksVersion;
set => SetProperty(ref _navisworksVersion, value);
}
///
/// 内存使用情况
///
public string MemoryUsage
{
get => _memoryUsage;
set => SetProperty(ref _memoryUsage, value);
}
///
/// 运行时间
///
public string RunningTime
{
get => _runningTime;
set => SetProperty(ref _runningTime, value);
}
#endregion
#region 命令
public ICommand ClearLogCommand { get; private set; }
public ICommand ExportLogCommand { get; private set; }
public ICommand ViewLogCommand { get; private set; }
public ICommand OpenSettingsCommand { get; private set; }
public ICommand ResetSettingsCommand { get; private set; }
public ICommand ImportConfigCommand { get; private set; }
public ICommand CheckUpdateCommand { get; private set; }
public ICommand GeneratePerformanceReportCommand { get; private set; }
public ICommand DiagnosticCommand { get; private set; }
#endregion
#region 构造函数
public SystemManagementViewModel() : base()
{
try
{
// 获取UI状态管理器实例
_uiStateManager = UIStateManager.Instance;
// 验证关键组件是否正常初始化
if (_uiStateManager == null)
{
LogManager.Error("UIStateManager初始化失败");
throw new InvalidOperationException("UIStateManager初始化失败");
}
// 初始化线程安全的集合
LogLevels = new ThreadSafeObservableCollection();
// 初始化命令
InitializeCommands();
// 初始化系统管理设置
InitializeSystemManagementSettingsAsync();
LogManager.Info("SystemManagementViewModel构造函数执行完成");
}
catch (Exception ex)
{
LogManager.Error($"SystemManagementViewModel构造函数异常: {ex.Message}", ex);
// 在构造函数中尽量保证对象处于可用状态
UpdateMainStatus("初始化失败,请检查日志");
throw;
}
}
///
/// 带主ViewModel参数的构造函数,支持统一状态栏
///
/// 主ViewModel,用于统一状态栏
public SystemManagementViewModel(LogisticsControlViewModel mainViewModel) : base()
{
try
{
// 设置主ViewModel引用到基类
SetMainViewModel(mainViewModel);
// 获取UI状态管理器实例
_uiStateManager = UIStateManager.Instance;
// 验证关键组件是否正常初始化
if (_uiStateManager == null)
{
LogManager.Error("UIStateManager初始化失败");
throw new InvalidOperationException("UIStateManager初始化失败");
}
// 初始化线程安全的集合
LogLevels = new ThreadSafeObservableCollection();
// 初始化命令
InitializeCommands();
// 初始化系统管理设置
InitializeSystemManagementSettingsAsync();
LogManager.Info("SystemManagementViewModel构造函数执行完成 - 支持统一状态栏");
}
catch (Exception ex)
{
LogManager.Error($"SystemManagementViewModel构造函数异常: {ex.Message}", ex);
// 在构造函数中尽量保证对象处于可用状态
UpdateMainStatus("初始化失败,请检查日志");
throw;
}
}
#endregion
#region 初始化
///
/// 初始化命令
///
private void InitializeCommands()
{
try
{
// 系统管理命令
ViewLogCommand = new RelayCommand(() => ExecuteViewLog());
ClearLogCommand = new RelayCommand(() => ExecuteClearLog());
ExportLogCommand = new RelayCommand(() => ExecuteExportLog());
OpenSettingsCommand = new RelayCommand(() => ExecuteOpenSettings());
ResetSettingsCommand = new RelayCommand(() => ExecuteResetSettings());
ImportConfigCommand = new RelayCommand(() => ExecuteImportConfig());
CheckUpdateCommand = new RelayCommand(() => ExecuteCheckUpdate());
GeneratePerformanceReportCommand = new RelayCommand(() => ExecuteGeneratePerformanceReport());
DiagnosticCommand = new RelayCommand(() => ExecuteDiagnostic());
LogManager.Info("系统管理命令初始化完成");
}
catch (Exception ex)
{
LogManager.Error($"初始化命令失败: {ex.Message}", ex);
throw;
}
}
///
/// 网格可视化设置变更事件处理
///
private void OnGridVisualizationChanged()
{
try
{
LogManager.Info($"网格可视化设置已更改: 通行={ShowWalkableGrid}, 障碍物={ShowObstacleGrid}, 未知={ShowUnknownGrid}");
// 通知路径规划管理器更新网格可视化
var pathPlanningManager = GetPathPlanningManager();
if (pathPlanningManager != null)
{
// 应用新的可视化设置
pathPlanningManager.UpdateGridVisualizationSettings(
showWalkable: ShowWalkableGrid,
showObstacle: ShowObstacleGrid,
showUnknown: ShowUnknownGrid);
UpdateMainStatus("网格可视化设置已更新");
}
else
{
LogManager.Warning("无法获取路径规划管理器,网格可视化设置可能不会立即生效");
UpdateMainStatus("网格可视化设置已保存");
}
}
catch (Exception ex)
{
LogManager.Error($"应用网格可视化设置失败: {ex.Message}", ex);
UpdateMainStatus("网格可视化设置应用失败");
}
}
///
/// 获取路径规划管理器实例
///
/// 路径规划管理器或null
private PathPlanningManager GetPathPlanningManager()
{
try
{
// 使用PathPlanningManager的静态方法获取活动实例
var pathManager = PathPlanningManager.GetActivePathManager();
if (pathManager != null)
{
LogManager.Info("成功获取到活动的PathPlanningManager实例");
return pathManager;
}
else
{
LogManager.Warning("当前没有活动的PathPlanningManager实例");
return null;
}
}
catch (Exception ex)
{
LogManager.Error($"获取PathPlanningManager失败: {ex.Message}", ex);
return null;
}
}
///
/// 初始化系统管理设置
///
private async Task InitializeSystemManagementSettingsAsync()
{
await SafeExecuteAsync(async () =>
{
await _uiStateManager.ExecuteUIUpdateAsync(() =>
{
// 初始化日志级别
LogLevels.Clear();
var logLevels = new[] { "Debug", "Info", "Warning", "Error" };
foreach (var level in logLevels)
{
LogLevels.Add(level);
}
SelectedLogLevel = "Info";
// 初始化系统信息
PluginVersion = "v1.0";
NavisworksVersion = "2026";
UpdateMainStatus("系统管理初始化完成");
});
// 启动性能监控
StartPerformanceMonitoring();
LogManager.Info("系统管理设置初始化完成");
}, "初始化系统管理设置");
}
///
/// 启动性能监控 (已优化为Idle事件)
///
private void StartPerformanceMonitoring()
{
// 如果已经释放,不启动监控
if (_disposed)
{
LogManager.Info("SystemManagementViewModel已释放,跳过性能监控启动");
return;
}
_startTime = DateTime.Now;
_lastPerformanceUpdate = DateTime.MinValue;
// 使用IdleEventManager注册性能监控任务,替代DispatcherTimer
const string taskId = "SystemManagement_PerformanceMonitor";
IdleEventManager.Instance.RegisterTask(
taskId,
UpdatePerformanceMetrics, // 要执行的操作
30000, // 30秒间隔 (毫秒)
5 // 中等优先级
);
LogManager.Info("SystemManagementViewModel性能监控已启动 (Idle事件模式)");
}
///
/// 更新性能指标 (Idle事件回调方法)
///
private void UpdatePerformanceMetrics()
{
try
{
// 检查释放状态,避免在释放后继续更新UI
if (_disposed)
{
LogManager.Info("SystemManagementViewModel已释放,停止性能监控更新");
IdleEventManager.Instance.UnregisterTask("SystemManagement_PerformanceMonitor");
return;
}
// 更新内存使用
var process = System.Diagnostics.Process.GetCurrentProcess();
var memoryMB = process.WorkingSet64 / (1024 * 1024);
MemoryUsage = $"{memoryMB} MB";
// 更新运行时间
var runTime = DateTime.Now - _startTime;
RunningTime = $"{runTime.Hours:D2}:{runTime.Minutes:D2}:{runTime.Seconds:D2}";
// 记录上次更新时间
_lastPerformanceUpdate = DateTime.Now;
LogManager.Debug($"性能指标已更新: 内存={MemoryUsage}, 运行时间={RunningTime}");
}
catch (Exception ex)
{
LogManager.Error($"性能监控更新失败: {ex.Message}");
// 发生异常时停止监控,避免持续错误
if (!_disposed)
{
IdleEventManager.Instance.UnregisterTask("SystemManagement_PerformanceMonitor");
}
}
}
#endregion
#region 命令实现
///
/// 查看日志
///
private void ExecuteViewLog()
{
SafeExecute(() =>
{
try
{
// 创建并显示日志查看器对话框
var logViewerDialog = new NavisworksTransport.UI.WPF.Views.LogViewerDialog();
// 尝试设置窗口所有者,使用更安全的方式
try
{
// 查找当前活动的主窗口
var mainWindow = System.Windows.Application.Current.MainWindow;
if (mainWindow != null && mainWindow.IsLoaded)
{
logViewerDialog.Owner = mainWindow;
}
else
{
// 如果主窗口不可用,查找当前活动的窗口
foreach (System.Windows.Window window in System.Windows.Application.Current.Windows)
{
if (window.IsActive && window.IsLoaded)
{
logViewerDialog.Owner = window;
break;
}
}
}
}
catch (Exception ownerEx)
{
// 如果设置Owner失败,记录警告但继续显示窗口
LogManager.Warning($"设置日志查看器Owner失败: {ownerEx.Message}");
}
// 显示对话框(使用Show而不是ShowDialog以避免阻塞)
logViewerDialog.Show();
UpdateMainStatus("日志查看器已打开");
LogManager.Info("通过系统管理打开日志查看器");
}
catch (Exception ex)
{
UpdateMainStatus("打开日志查看器失败");
LogManager.Error($"打开日志查看器失败: {ex.Message}", ex);
// 显示错误消息给用户
System.Windows.MessageBox.Show($"打开日志查看器失败: {ex.Message}", "错误",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Error);
}
}, "查看日志");
}
///
/// 清空日志
///
private void ExecuteClearLog()
{
SafeExecute(() =>
{
try
{
// 弹出确认对话框
var result = System.Windows.MessageBox.Show(
"确定要清空日志吗?此操作不可撤销。",
"确认清空日志",
System.Windows.MessageBoxButton.YesNo,
System.Windows.MessageBoxImage.Question);
if (result == System.Windows.MessageBoxResult.Yes)
{
// 调用LogManager清空日志
LogManager.ClearLog();
UpdateMainStatus("日志已清空");
LogManager.Info("通过系统管理清空日志");
// 显示成功消息
System.Windows.MessageBox.Show("日志已成功清空。", "操作完成",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Information);
}
else
{
UpdateMainStatus("取消清空日志");
LogManager.Info("用户取消清空日志操作");
}
}
catch (Exception ex)
{
UpdateMainStatus("清空日志失败");
LogManager.Error($"清空日志失败: {ex.Message}", ex);
// 显示错误消息给用户
System.Windows.MessageBox.Show($"清空日志失败: {ex.Message}", "错误",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Error);
}
}, "清空日志");
}
///
/// 导出日志
///
private void ExecuteExportLog()
{
SafeExecute(() =>
{
try
{
// 创建保存文件对话框
var saveFileDialog = new Microsoft.Win32.SaveFileDialog
{
Title = "导出日志文件",
Filter = "日志文件 (*.log)|*.log|文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*",
DefaultExt = "log",
FileName = $"NavisworksTransport_Log_{DateTime.Now:yyyyMMdd_HHmmss}.log"
};
if (saveFileDialog.ShowDialog() == true)
{
var logFilePath = LogManager.LogFilePath;
if (System.IO.File.Exists(logFilePath))
{
// 从源日志文件复制到目标位置
System.IO.File.Copy(logFilePath, saveFileDialog.FileName, true);
UpdateMainStatus($"日志已导出到: {System.IO.Path.GetFileName(saveFileDialog.FileName)}");
LogManager.Info($"日志已导出到: {saveFileDialog.FileName}");
// 显示成功消息并询问是否打开文件夹
var result = System.Windows.MessageBox.Show(
$"日志已成功导出到:\n{saveFileDialog.FileName}\n\n是否打开文件所在文件夹?",
"导出完成",
System.Windows.MessageBoxButton.YesNo,
System.Windows.MessageBoxImage.Information);
if (result == System.Windows.MessageBoxResult.Yes)
{
// 打开文件所在文件夹并选中文件
System.Diagnostics.Process.Start("explorer.exe", $"/select,\"{saveFileDialog.FileName}\"");
}
}
else
{
// 如果日志文件不存在,创建一个空的日志文件
System.IO.File.WriteAllText(saveFileDialog.FileName, $"NavisworksTransport 日志文件\n导出时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}\n\n日志文件为空或不存在。\n");
UpdateMainStatus("日志文件不存在,已创建空文件");
LogManager.Warning("日志文件不存在,已创建空的导出文件");
System.Windows.MessageBox.Show("原始日志文件不存在,已创建空的导出文件。", "注意",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Warning);
}
}
else
{
UpdateMainStatus("取消导出日志");
LogManager.Info("用户取消导出日志操作");
}
}
catch (Exception ex)
{
UpdateMainStatus("导出日志失败");
LogManager.Error($"导出日志失败: {ex.Message}", ex);
// 显示错误消息给用户
System.Windows.MessageBox.Show($"导出日志失败: {ex.Message}", "错误",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Error);
}
}, "导出日志");
}
///
/// 打开设置
///
private void ExecuteOpenSettings()
{
SafeExecute(() =>
{
// TODO: 实现设置对话框
UpdateMainStatus("打开插件设置");
LogManager.Info("打开设置");
}, "打开设置");
}
///
/// 重置设置
///
private void ExecuteResetSettings()
{
SafeExecute(() =>
{
// TODO: 实现设置重置功能
UpdateMainStatus("设置已重置为默认值");
IsAutoSaveEnabled = true;
IsDebugModeEnabled = false;
LogManager.Info("重置设置");
}, "重置设置");
}
///
/// 导入配置
///
private void ExecuteImportConfig()
{
SafeExecute(() =>
{
// TODO: 实现配置导入功能
UpdateMainStatus("配置导入完成");
LogManager.Info("导入配置");
}, "导入配置");
}
///
/// 检查更新 (已优化为Idle事件监听)
///
private void ExecuteCheckUpdate()
{
SafeExecute(() =>
{
UpdateMainStatus("正在检查更新...");
// 使用Idle事件监听替代Thread.Sleep(2000)
const string taskId = "SystemManagement_CheckUpdate";
var startTime = DateTime.Now;
IdleEventManager.Instance.RegisterOnceTask(
taskId,
() => (DateTime.Now - startTime).TotalMilliseconds >= 2000, // 2秒后条件满足
() =>
{
try
{
// 检查释放状态,避免在释放后更新UI
if (_disposed)
{
LogManager.Info("SystemManagementViewModel已释放,跳过更新检查UI更新");
return;
}
UpdateMainStatus("当前版本已是最新版本");
}
catch (Exception ex)
{
LogManager.Error($"更新检查UI更新失败: {ex.Message}");
}
},
8 // 高优先级
);
LogManager.Info("检查更新 (使用Idle事件监听)");
}, "检查更新");
}
///
/// 生成性能报告 (已优化为Idle事件监听)
///
private void ExecuteGeneratePerformanceReport()
{
SafeExecute(() =>
{
UpdateMainStatus("正在生成性能报告...");
// 使用Idle事件监听替代Thread.Sleep(1500)
const string taskId = "SystemManagement_GenerateReport";
var startTime = DateTime.Now;
IdleEventManager.Instance.RegisterOnceTask(
taskId,
() => (DateTime.Now - startTime).TotalMilliseconds >= 1500, // 1.5秒后条件满足
() =>
{
try
{
// 检查释放状态,避免在释放后更新UI
if (_disposed)
{
LogManager.Info("SystemManagementViewModel已释放,跳过性能报告UI更新");
return;
}
UpdateMainStatus("性能报告生成完成");
// 性能信息更新已合并到统一状态栏
}
catch (Exception ex)
{
LogManager.Error($"性能报告UI更新失败: {ex.Message}");
}
},
8 // 高优先级
);
LogManager.Info("生成性能报告 (使用Idle事件监听)");
}, "生成性能报告");
}
///
/// 执行环境诊断
///
private void ExecuteDiagnostic()
{
SafeExecute(() =>
{
try
{
LogManager.Info("开始环境诊断");
// 直接调用本地的环境诊断方法
string diagnosticReport = DiagnoseEnvironment();
// 显示诊断结果对话框
System.Windows.MessageBox.Show(
diagnosticReport,
"环境诊断结果",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Information);
LogManager.Info("环境诊断完成");
}
catch (Exception ex)
{
LogManager.Error($"环境诊断失败: {ex.Message}", ex);
System.Windows.MessageBox.Show(
$"环境诊断失败: {ex.Message}",
"错误",
System.Windows.MessageBoxButton.OK,
System.Windows.MessageBoxImage.Error);
}
}, "环境诊断");
}
///
/// 环境诊断方法 - 快速检查API是否可用
///
/// 诊断报告
private string DiagnoseEnvironment()
{
var report = new System.Text.StringBuilder();
report.AppendLine("=== Navisworks API环境诊断报告 ===");
try
{
// 1. 线程状态
var apartmentState = System.Threading.Thread.CurrentThread.GetApartmentState();
report.AppendLine($"线程状态: {apartmentState} {(apartmentState == System.Threading.ApartmentState.STA ? "✓" : "✗")}");
// 2. API可用性
try
{
var app = Autodesk.Navisworks.Api.Application.ActiveDocument;
report.AppendLine("API可用性: 可用 ✓");
}
catch (Exception apiEx)
{
report.AppendLine($"API可用性: 异常 - {apiEx.Message} ✗");
}
// 3. 文档状态
try
{
var document = Autodesk.Navisworks.Api.Application.ActiveDocument;
if (document != null)
{
report.AppendLine($"活动文档: {document.FileName ?? "未命名"} ✓");
report.AppendLine($"模型数量: {document.Models?.Count ?? 0}");
}
else
{
report.AppendLine("活动文档: 无 ✗");
}
}
catch (Exception docEx)
{
report.AppendLine($"活动文档: 异常 - {docEx.Message} ✗");
}
// 4. 内存状态
long memoryMB = GC.GetTotalMemory(false) / 1024 / 1024;
report.AppendLine($"当前内存: {memoryMB} MB");
// 5. 系统信息
report.AppendLine($"插件版本: {PluginVersion}");
report.AppendLine($"Navisworks版本: {NavisworksVersion}");
report.AppendLine("系统状态: 正常");
report.AppendLine("=== 诊断完成 ===");
string result = report.ToString();
LogManager.Info($"[SystemManagement] 环境诊断报告:\n{result}");
return result;
}
catch (Exception ex)
{
string error = $"诊断过程出错: {ex.Message}";
report.AppendLine(error);
LogManager.Error($"[SystemManagement] {error}");
return report.ToString();
}
}
#endregion
#region 辅助方法
///
/// 安全执行异步操作
///
private async Task SafeExecuteAsync(Func action, string operationName = "未知操作")
{
try
{
await action();
}
catch (Exception ex)
{
LogManager.Error($"{operationName}发生异常: {ex.Message}", ex);
UpdateMainStatus($"{operationName}失败: {ex.Message}");
}
}
///
/// 安全执行同步操作
///
private void SafeExecute(Action action, string operationName = "未知操作")
{
try
{
action();
}
catch (Exception ex)
{
LogManager.Error($"{operationName}发生异常: {ex.Message}", ex);
UpdateMainStatus($"{operationName}失败: {ex.Message}");
}
}
///
/// 验证ViewModel状态是否正常
///
public bool IsValidState()
{
return _uiStateManager != null &&
LogLevels != null;
}
///
/// 获取ViewModel状态信息
///
public string GetStateInfo()
{
return $"UIStateManager: {(_uiStateManager != null ? "已初始化" : "未初始化")}, " +
$"日志级别数量: {LogLevels?.Count ?? 0}";
}
#endregion
#region 清理资源和IDisposable实现
///
/// 释放资源
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// 释放资源的具体实现
///
/// 是否正在释放托管资源
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
try
{
// 调用现有的清理逻辑
Cleanup();
LogManager.Info("SystemManagementViewModel已正确释放资源 (IDisposable)");
}
catch (Exception ex)
{
LogManager.Error($"SystemManagementViewModel释放资源时发生异常: {ex.Message}", ex);
}
}
_disposed = true;
}
}
public void Cleanup()
{
try
{
LogManager.Info("开始清理SystemManagementViewModel资源");
// 停止性能监控Idle任务,替代DispatcherTimer清理
try
{
IdleEventManager.Instance.UnregisterTask("SystemManagement_PerformanceMonitor");
LogManager.Info("SystemManagementViewModel性能监控Idle任务已停止");
}
catch (Exception ex)
{
LogManager.Warning($"停止性能监控Idle任务时出现警告: {ex.Message}");
}
// 清理可能的一次性任务
try
{
IdleEventManager.Instance.UnregisterTask("SystemManagement_CheckUpdate");
IdleEventManager.Instance.UnregisterTask("SystemManagement_GenerateReport");
LogManager.Debug("SystemManagementViewModel一次性Idle任务已清理");
}
catch (Exception ex)
{
LogManager.Debug($"清理一次性Idle任务时出现提示: {ex.Message}");
}
LogManager.Info("SystemManagementViewModel资源清理完成");
}
catch (Exception ex)
{
LogManager.Error($"SystemManagementViewModel清理失败: {ex.Message}");
}
}
#endregion
}
}