private void ReloadCache()
        {
            List <string> tmp1 = new List <string>(0);
            List <string> tmp2 = new List <string>(0);

            appCache = new List <ResultItem>(0);
            string p1 = Filesystem.GetFolderPath(Environment.SpecialFolder.StartMenu);
            string p2 = Filesystem.GetFolderPath(Environment.SpecialFolder.CommonStartMenu);

            GetApps(p1, tmp1);
            try
            {
                appCache.Sort();
            }
            catch { }
            GetApps(p2, tmp2);
            List <string> fnd = new List <string>(0);

            foreach (string t in tmp1)
            {
                string fnd2 = t.Substring(p1.Length + 1);
                string dtxt;
                if (!fnd2.EndsWith("\\"))
                {
                    fnd2 = fnd2.Remove(fnd2.Length - 4);
                    dtxt = fnd2.Substring(fnd2.LastIndexOf("\\") + 1);
                }
                else
                {
                    dtxt = fnd2.Substring(fnd2.Remove(fnd2.Length - 1).LastIndexOf("\\") + 1);
                }
                appCache.Add(new ResultItem(dtxt, t, fnd2));
                fnd.Add(fnd2);
            }
            foreach (string t in tmp2)
            {
                string fnd2 = t.Substring(p2.Length + 1);
                string dtxt;
                if (!fnd2.EndsWith("\\"))
                {
                    fnd2 = fnd2.Remove(fnd2.Length - 4);
                    dtxt = fnd2.Substring(fnd2.LastIndexOf("\\") + 1);
                }
                else
                {
                    dtxt = fnd2.Substring(fnd2.Remove(fnd2.Length - 1).LastIndexOf("\\") + 1);
                }
                if (fnd.Contains(fnd2))
                {
                    continue;
                }
                int ind = 0;
                foreach (string t1 in tmp1)
                {
                    string fnd3 = t1.Substring(p2.Length + 1);
                    if (!fnd3.EndsWith("\\"))
                    {
                        fnd3 = fnd3.Remove(fnd3.Length - 4);
                    }
                    if (fnd2.CompareTo(fnd3) < 0)
                    {
                        ind++;
                    }
                    else
                    {
                        break;
                    }
                }
                tmp1.Insert(ind, t);
                appCache.Insert(ind, new ResultItem(dtxt, t, fnd2));
            }
        }