using Panuon.WPF.UI; using PLCHelper; using System; using System.Collections.Generic; using System.Timers; using System.Windows; using System.Windows.Controls; namespace Plugin.TestResult { /// /// CoolerStatus.xaml 的交互逻辑 /// public partial class CoolerStatus : WindowX { private int ovenIndex; private int columns; private Timer timer; private List coolers = new List(); public CoolerStatus(int ovenIndex, int columns, string title) { DataContext = this; this.ovenIndex = ovenIndex; this.columns = columns; Title = title; timer = new Timer(); timer.Interval = 1000; timer.Elapsed += Timer_Elapsed; InitializeComponent(); RefreshUI(); RefreshStatus(); } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { RefreshStatus(); } private void RefreshStatus() { foreach (var cooler in coolers) { try { if (S7Context.GetData("", $"Cooler{cooler.index + 1}_Status", out object val)) { cooler.Dispatcher.Invoke(() => { cooler.Status = (ushort)val; }); } } catch (Exception ex) { } } } private void RefreshUI() { mainGrid.Children.Clear(); mainGrid.ColumnDefinitions.Clear(); for (int i = 0; i < this.columns; i++) { ColumnDefinition newCol = new ColumnDefinition(); newCol.Width = new GridLength(1, GridUnitType.Star); mainGrid.ColumnDefinitions.Add(newCol); var cooler = new Cooler(ovenIndex * columns + i); Grid.SetColumn(cooler, i); mainGrid.Children.Add(cooler); coolers.Add(cooler); } } private void WindowX_Closed(object sender, EventArgs e) { timer.Enabled = false; timer.Dispose(); foreach (var cooler in coolers) { cooler.Release(); } } private void WindowX_Loaded(object sender, RoutedEventArgs e) { timer.Enabled = true; this.Loaded -= WindowX_Loaded; } } }