private void UpdateProcesses()
        {
            // Note: additional try/catch blocks were added here to prevent stalls when Windows is put into
            //       suspend or hibernation.

            try
            {
                if (!this.AutoHandleFavorites)
                {
                    MainWindow frm = MainWindow.ext();

                    if (frm != null)
                    {
                        if ((frm.WindowState == FormWindowState.Minimized) || (!frm.Visible))
                        {
                            return;
                        }
                    }
                }
            }
            catch { } // swallow any exceptions in attempting to check window minimize/visibility state

            lock (this.updateLock)
            {
                // check existing processes for changes (auto-prune)
                for (int i = 0; i < this._processDetails.Count;)
                {
                    try
                    {
                        ProcessDetails pd = this._processDetails[i];

                        bool should_be_pruned = pd.ProcessHasExited;

                        if (!should_be_pruned)
                        {
                            string current_title = "";

                            if (!pd.NoAccess)
                            {
                                // 2 or 10 seconds until window title timeout, depending on slow-window detection mode
                                Tools.StartMethodMultithreadedAndWait(() => { current_title = Native.GetWindowTitle(pd.WindowHandle); }, (Utilities.AppEnvironment.SettingValue("SlowWindowDetection", false)) ? 10 : 2);
                                should_be_pruned = should_be_pruned || (pd.WindowTitle != current_title);
                            }
                        }

                        if (should_be_pruned)
                        {
                            if (pd.MadeBorderless)
                            {
                                HandlePrunedProcess(pd);
                            }
                            _processDetails.RemoveAt(i);
                        }
                        else
                        {
                            i++;
                        }
                    }
                    catch
                    {
                        // swallow any exceptions and move to the next item in the array
                        i++;
                    }
                }

                // add new process windows
                try
                {
                    windows.QueryProcessesWithWindows((pd) =>
                    {
                        if (_hiddenProcesses.IsHidden(pd.Proc.ProcessName))
                        {
                            return;
                        }
                        if (!_processDetails.Select(p => p.Proc.Id).Contains(pd.Proc.Id) ||
                            !_processDetails.Select(p => p.WindowTitle).Contains(pd.WindowTitle))
                        {
                            _processDetails.Add(pd);
                        }
                    }, _processDetails.WindowPtrSet);
                }
                catch { } // swallow any exceptions in attempting to add new windows

                // update window
                window.lblUpdateStatus.Text = "Right-click for more options.  Last updated " + DateTime.Now.ToString();
            }
        }