using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace MECF.Framework.Common.CommonData { public class EndPointConfigItem : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void InvokePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public void InvokePropertyChanged() { Type t = this.GetType(); var ps = t.GetProperties(); foreach (var p in ps) { InvokePropertyChanged(p.Name); } } public string ExposureTime { get; set; } public string WaveLengthA { get; set; } public string BinningA { get; set; } public string WaveLengthB { get; set; } public string BinningB { get; set; } public string WaveLengthC { get; set; } public string BinningC { get; set; } public string WaveLengthD { get; set; } public string BinningD { get; set; } public string Fd { get; set; } public string PrefilterTime { get; set; } public string PostfilterTime { get; set; } public string AlgorithmType { get; set; } public string Criteria { get; set; } public string DelayTime { get; set; } public string ValidationTime { get; set; } public string ValidationValue { get; set; } public string TimeWindow { get; set; } public string MinimalTime { get; set; } public string PostponeTime { get; set; } public bool Control { get; set; } public bool Normalization { get; set; } public bool EnablePostponePercent { get; set; } public bool EnableCriterialPercent { get; set; } public bool EnableEventTrigger { get; set; } public bool IsFaultIfNoTrigger { get; set; } public string ToValue() { return $@"ExposureTime={ExposureTime};WaveLengthA={WaveLengthA};BinningA={BinningA};WaveLengthB={WaveLengthB};" + $@"BinningB={BinningB};WaveLengthC={WaveLengthC};BinningC={BinningC};WaveLengthD={WaveLengthD};BinningD={BinningD};Fd={Fd};" + $@"PrefilterTime={PrefilterTime};PostfilterTime={PostfilterTime};AlgorithmType={AlgorithmType};Criteria={Criteria};DelayTime={DelayTime};ValidationTime={ValidationTime};" + $@"ValidationValue={ValidationValue};TimeWindow={TimeWindow};MinimalTime={MinimalTime};PostponeTime={PostponeTime};Control={Control};Normalization={Normalization};" + $@"EnablePostponePercent={EnablePostponePercent};EnableCriterialPercent={EnableCriterialPercent};EnableEventTrigger={EnableEventTrigger};IsFaultIfNoTrigger={IsFaultIfNoTrigger};" ; } public void SetValue(string config) { string[] items = config.Split(';'); foreach (var item in items) { if (string.IsNullOrEmpty(item)) continue; string[] pairs = item.Split('='); if (pairs.Length != 2) continue; Parallel.ForEach(this.GetType().GetProperties(), property => { PropertyInfo pi = (PropertyInfo)property; if (pi.Name == pairs[0]) { try { var convertedValue = Convert.ChangeType(pairs[1], pi.PropertyType); var originValue = Convert.ChangeType(pi.GetValue(this, null), pi.PropertyType); if (originValue != convertedValue) { pi.SetValue(this, convertedValue, null); } } catch (Exception) { } } }); } } } }