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 WaferStatusHandler : IHandler { public static readonly List ReverseModules = new List { "LP1", "LP2", "LP3", "LP4" }; private Func> GetWaferStatusByModule; private static object lockObj = new object(); public Dictionary WaferStatusDic { get; private set; } public MsgPool looper { get; private set; } public WaferStatusHandler(Func> funcGetWaferStatus, List allModules) { WaferStatusDic = new Dictionary(); looper = new MsgPool(500, Do, null, false); GetWaferStatusByModule = funcGetWaferStatus; allModules.ForEach(delegate(string key) { InitWafersByModule(key); }); } public void Handle() { looper.Run(); } private void InitWafersByModule(string moduleID) { lock (lockObj) { if (!WaferStatusDic.ContainsKey(moduleID)) { WaferStatusDic.Add(moduleID, new ModuleWaferManager(moduleID)); List list = GetWaferStatusByModule(moduleID); if (list != null) { ModuleWaferManager moduleWaferManager = WaferStatusDic[moduleID]; for (int i = 0; i < list.Count; i++) { moduleWaferManager.Wafers.Add(list[i]); } if (ReverseModules.Contains(moduleID)) { moduleWaferManager.Wafers.Reverse(); } } } } } private void Do(MsgPool pool) { lock (lockObj) { if (Application.Current != null && Application.Current.Dispatcher != null) { foreach (KeyValuePair item in WaferStatusDic) { List mWafers = GetWaferStatusByModule(item.Key); Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { if (mWafers != null && mWafers.Count == item.Value.Wafers.Count) { for (int i = 0; i < mWafers.Count; i++) { int index = (!ReverseModules.Contains(item.Key)) ? i : (mWafers.Count - i - 1); item.Value.Wafers[i].WaferStatus = mWafers[index].WaferStatus; item.Value.Wafers[i].WaferID = mWafers[index].WaferID; item.Value.Wafers[i].SourceName = mWafers[index].SourceName; item.Value.Wafers[i].SequenceName=mWafers[index].SequenceName; } } }); } } } } } }