| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | using OpenSEMI.Core.Msg;using System;using System.Collections.Generic;using System.Threading;using System.Windows;using System.Windows.Threading;namespace OpenSEMI.ClientBase.Handlers{	public class StatesHandler : IHandler	{		private Func<List<string>, List<State>> GetStates;		private static object lockObj = new object();		public Dictionary<string, State> States		{			get;			private set;		}		public MsgPool looper		{			get;			private set;		}		private List<string> Keys		{			get;			set;		}		private List<string> CommonKeys		{			get;			set;		}		public StatesHandler(Func<List<string>, List<State>> funcGetStates, List<string> allkeys)		{			Keys = new List<string>();			CommonKeys = new List<string>();			States = new Dictionary<string, State>();			looper = new MsgPool(500, Do, null, false);			GetStates = funcGetStates;			allkeys.ForEach(delegate(string key)			{				States.Add(key, new State				{					Key = key,					DisplayValue = string.Empty				});			});		}		public void Handle()		{			looper.Run();		}		public void Do(MsgPool pool)		{			List<string> list = new List<string>();			lock (lockObj)			{				if ((CommonKeys.Count != 0 || Keys.Count != 0) && Application.Current != null && Application.Current.Dispatcher != null)				{					if (CommonKeys.Count > 0)					{						list.AddRange(CommonKeys);					}					if (Keys.Count > 0)					{						list.AddRange(Keys);					}					goto end_IL_001c;				}				return;				end_IL_001c:;			}			List<State> states = GetStates(list);			Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate			{				states.ForEach(delegate(State state)				{					if (States.ContainsKey(state.Key))					{						States[state.Key].DisplayValue = state.DisplayValue;					}				});			});		}		public void Register(List<string> keys, bool isCommon = false)		{			lock (lockObj)			{				if (isCommon)				{					keys.ForEach(delegate(string e)					{						if (!CommonKeys.Contains(e))						{							CommonKeys.Add(e);						}					});				}				else				{					Keys.Clear();					Keys.AddRange(keys);				}			}		}		public void UnRegister(List<string> keys)		{			lock (lockObj)			{				Keys.Clear();			}		}	}}
 |