using FLY.OBJComponents.IService; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Windows.Threading; namespace FLY.OBJComponents.Client { public class SetPLCUpdatePlan:IDisposable { IPLCProxySystemService PLCos; long planid=0; DispatcherTimer timer;//可能被销毁了 string objname; IEnumerable propertynames; public SetPLCUpdatePlan(IPLCProxySystemService plsos, INotifyPropertyChanged obj, IEnumerable propertynames) { PLCos = plsos; this.propertynames = propertynames; this.objname = PLCos.ObjNames.First((kv) => kv.Value == obj).Key; PLCos.PropertyChanged += PLCos_PropertyChanged; timer = new DispatcherTimer()//120s 内必须再次注册 { Interval = TimeSpan.FromSeconds(60) }; timer.Tick += (s, e) => { if (planid != 0) { PLCos.FeedPlan(planid); } }; if (((PLCProxySystemServiceClient)PLCos).IsConnected) { PLCos.SetPlan( this.objname, this.propertynames, (planid, context) => { this.planid = planid; timer.Start(); }, null); } } private void PLCos_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "IsConnected") { if (((PLCProxySystemServiceClient)PLCos).IsConnected) { PLCos.SetPlan(objname, propertynames, (planid, context) => { this.planid = planid; timer.Start(); }, null); } else { this.planid = 0; timer.Stop(); } } } public void Dispose() { timer.Stop(); if(planid!=0) PLCos.RemovePlan(planid); } } }