public static void AddToCache(AutomationElement root, int ident, string Conditions, AutomationElement[] Result) { if (!PluginConfig.enable_cache) { return; } MatchCacheItem result = null; try { lock (cache_lock) result = MatchCache.Where(x => x.Conditions == Conditions && x.Ident == ident && x.Root.Equals(root)).FirstOrDefault(); } catch (Exception) { } if (result != null) { result.Result = Result; result.Created = DateTime.Now; return; } result = new MatchCacheItem() { Conditions = Conditions, Created = DateTime.Now, Root = root, Ident = ident, Result = Result }; lock (cache_lock) MatchCache.Add(result); }
public void RemoveFromCache(MatchCacheItem item) { var items = MatchCache.Where(x => x.Root.Equals(item.Root) && x.Ident >= item.Ident).ToList(); foreach (var e in items) { MatchCache.Remove(e); } MatchCache.Remove(item); }
public static void AddToCache(AutomationElement root, int ident, string Conditions, AutomationElement[] Result) { if (!PluginConfig.enable_cache) { return; } MatchCacheItem result = null; try { if (System.Threading.Monitor.TryEnter(cache_lock, 1000)) { try { result = MatchCache.Where(x => x.Conditions == Conditions && x.Ident == ident && x.Root.Equals(root)).FirstOrDefault(); } finally { System.Threading.Monitor.Exit(cache_lock); } } } catch (Exception) { } if (result != null) { result.Result = Result; result.Created = DateTime.Now; return; } result = new MatchCacheItem() { Conditions = Conditions, Created = DateTime.Now, Root = root, Ident = ident, Result = Result }; if (System.Threading.Monitor.TryEnter(cache_lock, 1000)) { try { MatchCache.Add(result); } finally { System.Threading.Monitor.Exit(cache_lock); } } }
public static void RemoveFromCache(MatchCacheItem item) { try { lock (cache_lock) { var items = MatchCache.Where(x => x.Root.Equals(item.Root) && x.Ident >= item.Ident).ToList(); foreach (var e in items) { MatchCache.Remove(e); } } } catch (Exception) { } lock (cache_lock) MatchCache.Remove(item); }
public static void RemoveFromCache(MatchCacheItem item, bool remove_related) { try { if (remove_related) { if (System.Threading.Monitor.TryEnter(cache_lock, 1000)) { try { var items = MatchCache.Where(x => x.Root.Equals(item.Root) && x.Ident >= item.Ident).ToList(); foreach (var e in items) { MatchCache.Remove(e); } } finally { System.Threading.Monitor.Exit(cache_lock); } } } } catch (Exception) { } if (System.Threading.Monitor.TryEnter(cache_lock, 1000)) { try { MatchCache.Remove(item); } finally { System.Threading.Monitor.Exit(cache_lock); } } }
public static AutomationElement[] GetFromCache(AutomationElement root, int ident, string Conditions) { if (!PluginConfig.enable_cache) { return(null); } var now = DateTime.Now; var timeout = PluginConfig.cache_timeout; MatchCacheItem result = null; MatchCacheItem[] _list = null; lock (cache_lock) _list = MatchCache.ToArray(); try { for (var i = _list.Length - 1; i >= 0; i--) { try { if (now - _list[i].Created > timeout) { RemoveFromCache(_list[i]); } if (_list[i].Conditions == Conditions && _list[i].Root.Equals(root) && _list[i].Ident == ident) { result = _list[i]; } } catch (Exception) { RemoveFromCache(_list[i]); } } } catch (Exception) { } if (result != null) { try { foreach (var e in result.Result) { // _ = e.Parent; if (!e.IsAvailable) { RemoveFromCache(result); return(null); } else if (!e.Properties.BoundingRectangle.IsSupported || e.Properties.BoundingRectangle.Value == System.Drawing.Rectangle.Empty) { RemoveFromCache(result); return(null); } //else if ((e.ControlType == FlaUI.Core.Definitions.ControlType.Button || // e.ControlType == FlaUI.Core.Definitions.ControlType.CheckBox || // e.ControlType == FlaUI.Core.Definitions.ControlType.ComboBox || // e.ControlType == FlaUI.Core.Definitions.ControlType.Text || // e.ControlType == FlaUI.Core.Definitions.ControlType.RadioButton // ) &&e.IsOffscreen) //{ // RemoveFromCache(result); // return null; //} } } catch (Exception) { RemoveFromCache(result); } return(result.Result); } return(null); }