/// <summary>
        /// TimerCallback delegate for threaded timer to reacquire a valid process by name
        /// </summary>
        private async void SearchProcess(object stateInfo)
        {// used when searching for a valid process within a timeout
            await MonitorLock.WaitAsync();

            try
            {// monitor with a shorter timeout for the search
                if (!TimeoutCancelled)
                {
                    await TimeoutWatcher(InnerTimeout);
                }
                else
                {
                    SearchTimer.Change(Timeout.Infinite, Timeout.Infinite);
                }
            }
            catch (Win32Exception) { }
            finally
            {
                MonitorLock.Release();
            }
        }
        /// <summary>
        /// TimerCallback delegate for threaded timer to monitor a named process
        /// </summary>
        private async void MonitorProcess(object stateInfo)
        {// only used when initially acquiring a process
            await MonitorLock.WaitAsync();

            try
            {// monitor with a long initial timeout (for loading/updates)
                if (!TimeoutCancelled)
                {
                    await TimeoutWatcher(GlobalTimeout);
                }
                else
                {
                    MonitorTimer.Change(Timeout.Infinite, Timeout.Infinite);
                }
            }
            catch (Win32Exception) { }
            finally
            {
                MonitorLock.Release();
            }
        }