// 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); } } }
// 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(); } } }