using Check.Main.Camera; using Check.Main.Dispatch; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace Check.Main.Common { /// /// 静态全局配置管理器,作为配置数据的“单一数据源”。 /// 负责加载、保存和通知配置变更。 /// public static class ConfigurationManager { // private static readonly string _configFilePath = Path.Combine(Application.StartupPath, "main_config.xml"); // private static ProcessConfig _currentConfig; // private static readonly object _lock = new object(); // /// // /// 当配置通过 SaveChanges() 方法保存后触发。 // /// 其他模块(如 FormControlPanel)可以订阅此事件以响应配置变更。 // /// // public static event Action OnConfigurationChanged; // /// // /// 静态构造函数在类首次被访问时自动执行,确保配置只被加载一次。 // /// // static ConfigurationManager() // { // Load(); // } // /// // /// 获取对当前配置对象的直接引用。 // /// PropertyGrid 可以直接绑定到这个对象进行编辑。 // /// // /// 当前的 ProcessConfig 实例。 // public static ProcessConfig GetCurrentConfig() // { // return _currentConfig; // } // /// // /// 从 XML 文件加载配置。如果文件不存在或加载失败,则创建一个新的默认配置。 // /// // private static void Load() // { // lock (_lock) // { // if (File.Exists(_configFilePath)) // { // try // { // XmlSerializer serializer = new XmlSerializer(typeof(ProcessConfig)); // using (var fs = new FileStream(_configFilePath, FileMode.Open, FileAccess.Read)) // { // _currentConfig = (ProcessConfig)serializer.Deserialize(fs); // ThreadSafeLogger.Log("主配置文件加载成功。"); // } // } // catch (Exception ex) // { // ThreadSafeLogger.Log("加载主配置失败: " + ex.Message + " 将使用默认配置。"); // _currentConfig = new ProcessConfig(); // } // } // else // { // ThreadSafeLogger.Log("未找到主配置文件,将创建新的默认配置。"); // _currentConfig = new ProcessConfig(); // } // } // } // /// // /// 将当前配置保存到文件,并通知所有监听者配置已更改。 // /// 这是响应UI变化的推荐方法。 // /// // public static void SaveChanges() // { // lock (_lock) // { // try // { // XmlSerializer serializer = new XmlSerializer(typeof(ProcessConfig)); // using (var fs = new FileStream(_configFilePath, FileMode.Create, FileAccess.Write)) // { // serializer.Serialize(fs, _currentConfig); // } // } // catch (Exception ex) // { // ThreadSafeLogger.Log("保存主配置失败: " + ex.Message); // } // } // // 在锁之外触发事件,以避免监听者中的代码导致死锁 // ThreadSafeLogger.Log("配置已保存,正在触发 OnConfigurationChanged 事件..."); // OnConfigurationChanged?.Invoke(); // } // 不再自己管理配置,而是直接从 ProductManager 获取 public static ProcessConfig GetCurrentConfig() { return ProductManager.CurrentConfig; } public static void SaveChanges() { ProductManager.SaveCurrentProductConfig(); } // OnConfigurationChanged 事件现在由 ProductManager.OnProductChanged 替代 // 如果其他地方还依赖这个事件,可以做一个桥接: public static event Action OnConfigurationChanged { add { ProductManager.OnProductChanged += value; } remove { ProductManager.OnProductChanged -= value; } } } }