CairoDesktop.MenuBar.BuildTaskBarItems C# (CSharp) Method

BuildTaskBarItems() private method

private BuildTaskBarItems ( ) : void
return void
        private void BuildTaskBarItems()
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                Dictionary<string, TaskBarItem> items = new Dictionary<string, TaskBarItem>();
                int Position = 0;
                foreach (string linkPath in TaskbarPinnedItems.GetPinnedTaskBarItems())
                {
                    ShellFile link = ShellFile.FromFilePath(linkPath);
                    if (!link.IsLink)
                    {
                        link.Dispose();
                        continue;
                    }

                    string displayName = link.GetDisplayName(DisplayNameType.Default);
                    string path = link.Properties.System.Link.TargetParsingPath.Value;
                    if (System.IO.File.Exists(path))
                        items.Add(path, new TaskBarItem(path, null, displayName, Imaging.ExtractIcon(path, IntPtr.Zero), Position++));
                    else
                        items.Add(EXPLORER_PATH, new TaskBarItem(EXPLORER_PATH, null, "File Explorer", Imaging.ExtractIcon(EXPLORER_PATH, IntPtr.Zero), Position++));
                    link.Dispose();
                }
                foreach (var win in WindowsTasksService.Windows.Where((w) => w.Enabled && w.ClassName != "Progman"))
                {
                    if (!items.ContainsKey(win.Process.MainModule.FileName))
                        items.Add(win.Process.MainModule.FileName, new TaskBarItem(win.Process.MainModule.FileName, null, win.Title, win.Icon, Position++));
                    items[win.Process.MainModule.FileName]._openWindows.Add(win);
                }
                foreach (var itm in items.Values)
                {
                    TaskBarItem existingWindow = null;
                    if ((existingWindow = TaskBarItems.FirstOrDefault((esw) => esw.FullPath == itm.FullPath)) != null)
                        itm.CopyFrom(existingWindow);
                }
                TaskBarItems.Clear();
                foreach (var itm in items.Values.OrderByDescending((itm) => -1 * itm.Position))
                    TaskBarItems.Add(itm);
            }));
        }