using Panuon.WPF.UI;
using PLCHelper;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
namespace Plugin.BurnIn
{
///
/// CoolerStatus.xaml 的交互逻辑
///
public partial class CoolerStatus : WindowX
{
private int ovenIndex;
private int columns;
private System.Timers.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 System.Timers.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;
}
}
}