public static ImageSource GetIcon(string path, double size) { string key = path + "@" + size.ToString(); ImageSource image = null; IconCacheLock.EnterReadLock(); bool bFound = IconCache.TryGetValue(key, out image); IconCacheLock.ExitReadLock(); if (bFound) { return(image); } try { var pathIndex = TextHelpers.Split2(path, "|"); IconExtractor extractor = new IconExtractor(pathIndex.Item1); int index = MiscFunc.parseInt(pathIndex.Item2); if (index < extractor.Count) { image = ToImageSource(extractor.GetIcon(index, new System.Drawing.Size((int)size, (int)size))); } if (image == null) { if (File.Exists(MiscFunc.NtOsKrnlPath)) // if running in WOW64 this does not exist { image = ToImageSource(Icon.ExtractAssociatedIcon(MiscFunc.NtOsKrnlPath)); } else // fall back to an other icon { image = ToImageSource(Icon.ExtractAssociatedIcon(MiscFunc.Shell32Path)); } } image.Freeze(); } catch (Exception err) { //AppLog.Exception(err); } IconCacheLock.EnterWriteLock(); if (!IconCache.ContainsKey(key)) { IconCache.Add(key, image); } IconCacheLock.ExitWriteLock(); return(image); }
public bool Restore(string state) { var stateTemp = TextHelpers.Split2(state, "#"); // in case we want to add some more info List <string> State = TextHelpers.SplitStr(stateTemp.Item1, "|", true); if (State.Count != dataGrid.Columns.Count) { return(false); } Hold = true; for (int i = 0; i < dataGrid.Columns.Count; i++) { var Column = dataGrid.Columns[i]; if (State[i].Length == 0) { Column.Visibility = Visibility.Collapsed; } else { Column.Visibility = Visibility.Visible; var PosWidth = TextHelpers.Split2(State[i], ";"); int Pos = MiscFunc.parseInt(PosWidth.Item1, -1); if (Pos == -1) { continue; } Column.DisplayIndex = Pos; Column.Width = new DataGridLength(MiscFunc.parseInt(PosWidth.Item2, 50)); } } Hold = false; CreateHeaderMenu(); return(true); }