// Try to avoid deadlock on Select method (sometimes infinite loop inside ContainerControl.UpdateFocusedControl)
        public static void SafeSelect(this Control control)
        {
            if (!control.CanSelect)
            {
                return;
            }

            // using Dispose to call ResetAbort always, if it was requested, even if no exception is thrown yet
            using (var threadWrapper = new ThreadWrapper(Thread.CurrentThread))
            {
                try
                {
                    using (CreateTimer(threadWrapper))
                    {
                        control.Select();
                    }
                }
                catch (ThreadAbortException ex)
                {
                    threadWrapper.ResetAbort();

                    Logger.WarnException(AbortReason, ex);
                }
            }
        }
Esempio n. 2
0
 // Try to avoid deadlock on Select method
 public static void SafeSelect(int sleep)
 {
     // using Dispose to call ResetAbort always, if it was requested, even if no exception is thrown yet
     using (var threadWrapper = new ThreadWrapper(Thread.CurrentThread))
     {
         try
         {
             using (CreateTimer(threadWrapper))
             {
                 Thread.Sleep(sleep);
             }
         }
         catch (ThreadAbortException ex)
         {
             threadWrapper.ResetAbort();
         }
     }
 }