You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.2 KiB
C#
106 lines
3.2 KiB
C#
using GalaSoft.MvvmLight;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using SlnMesnac.Model.domain;
|
|
using SlnMesnac.WPF.Model;
|
|
using SqlSugar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Timers;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace SlnMesnac.WPF.ViewModel
|
|
{
|
|
public class DeviceMonitorViewModel : ViewModelBase, IDisposable
|
|
{
|
|
private ISqlSugarClient? sqlSugarClient;
|
|
private Timer RefreRfidTimer;
|
|
private bool isProcessing = false;
|
|
|
|
public DeviceMonitorViewModel()
|
|
{
|
|
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
|
|
|
|
RefreRfidTimer = new Timer(2000); // 2 秒间隔
|
|
RefreRfidTimer.Elapsed += async (sender, e) => await OnTimedEventAsync(sender, e);
|
|
RefreRfidTimer.AutoReset = true;
|
|
RefreRfidTimer.Enabled = true;
|
|
}
|
|
|
|
#region 界面属性定义
|
|
|
|
private ObservableCollection<RfidInfo> rfidList = new ObservableCollection<RfidInfo>();
|
|
|
|
public ObservableCollection<RfidInfo> RfidList
|
|
{
|
|
get { return rfidList; }
|
|
set
|
|
{
|
|
rfidList = value;
|
|
RaisePropertyChanged(() => RfidList);
|
|
}
|
|
}
|
|
|
|
#endregion 界面属性定义
|
|
|
|
private async Task OnTimedEventAsync(Object source, ElapsedEventArgs e)
|
|
{
|
|
if (isProcessing)
|
|
{
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
isProcessing = true;
|
|
await LoadRfidDataAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
finally
|
|
{
|
|
isProcessing = false;
|
|
}
|
|
}
|
|
|
|
private async Task LoadRfidDataAsync()
|
|
{
|
|
List<BaseRfidInfo> rfidInfos = await sqlSugarClient!.Queryable<BaseRfidInfo>().ToListAsync();
|
|
|
|
await Application.Current.Dispatcher.InvokeAsync(() =>
|
|
{
|
|
//RfidList.Clear();
|
|
foreach (BaseRfidInfo dbRfid in rfidInfos)
|
|
{
|
|
RfidInfo? rfid = RfidList.FirstOrDefault(x => x.Name == dbRfid.Remark);
|
|
if (rfid == null)
|
|
{
|
|
rfid = new RfidInfo();
|
|
rfid.Name = dbRfid.Remark;
|
|
rfid.Ip = dbRfid.EquipIp;
|
|
rfid.IsOnline = dbRfid.IsOnline;
|
|
rfid.ImageSource = dbRfid.IsOnline == 1 ? "/Templates/image/rfid-green.png" : "/Templates/image/rfid-red.png";
|
|
RfidList.Add(rfid);
|
|
}
|
|
else
|
|
{
|
|
rfid.IsOnline = dbRfid.IsOnline;
|
|
rfid.ImageSource = dbRfid.IsOnline == 1 ? "/Templates/image/rfid-green.png" : "/Templates/image/rfid-red.png";
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
RefreRfidTimer?.Stop();
|
|
RefreRfidTimer?.Dispose();
|
|
}
|
|
}
|
|
} |