using guoke; using System.Windows; using WpfApp.src.components; namespace WpfApp.Services { /// /// SensorChart 管理器 - 负责传感器数据采集和更新 /// public class SensorChartManager { private readonly Window dispatcherOwner; private CancellationTokenSource cts; private readonly Random rand = new Random(); private readonly LogService log; private readonly DatabaseService db; private readonly EventService even; // 事件名称常量 private const string SENSOR_DATA_EVENT = "SensorDataUpdate"; // 绑定的传感器控件 public SensorChart Sensor1 { get; set; } public SensorChart Sensor2 { get; set; } public SensorChart Sensor3 { get; set; } public SensorChartManager(Window owner, LogService logService, DatabaseService databaseService, EventService eventService) { dispatcherOwner = owner; log = logService; db = databaseService; even = eventService; } /// /// 启动模拟数据采集 /// public void Start() { if (Sensor1 == null || Sensor2 == null || Sensor3 == null) throw new InvalidOperationException("请先绑定传感器控件"); cts = new CancellationTokenSource(); Task.Run(async () => { while (!cts.Token.IsCancellationRequested) { // 模拟数据 double s1 = rand.NextDouble() * 100 - 50; double s2 = rand.NextDouble() * 100 - 50; double s3 = rand.NextDouble() * 100 - 50; // 更新 UI dispatcherOwner.Dispatcher.Invoke(() => { Sensor1.SetSensorData("传感器1", s1); Sensor2.SetSensorData("传感器2", s2); Sensor3.SetSensorData("传感器3", s3); // 通过事件将传感器数据传递到ChartManager PublishSensorData("传感器1", s1, "myChart1"); PublishSensorData("传感器2", s2, "myChart2"); PublishSensorData("传感器3", s3, "myChart3"); }); await Task.Delay(1000); // 每1000毫秒采集一次 } }, cts.Token); } /// /// 停止采集 /// public void Stop() { cts?.Cancel(); } /// /// 发布传感器数据事件 /// /// 传感器标题 /// 传感器值 /// 图表标题 private void PublishSensorData(string sensorTitle, double sensorValue, string chartTitle) { if (even != null) { var eventArgs = new SensorDataEventArgs(sensorTitle, sensorValue, chartTitle); even.TriggerEvent(SENSOR_DATA_EVENT, this, eventArgs); } } } }