Undo() private method

private Undo ( ) : void
return void
コード例 #1
0
        public void Undo()
        {
            if (thread == null)
            {
                return; // Don't do anything
            }
            if (thread != Thread.CurrentThread)
            {
                throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_CannotUseSwitcherOtherThread"));
            }
            if (currEC != Thread.CurrentThread.GetExecutionContextNoCreate())
            {
                throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_SwitcherCtxMismatch"));
            }
            BCLDebug.Assert(currEC != null, " ExecutionContext can't be null");


            // Any critical failure inside scsw will cause FailFast
            scsw.Undo();

            try
            {
                HostExecutionContextSwitcher.Undo(hecsw);
            }
            finally
            {
                // Even if HostExecutionContextSwitcher.Undo(hecsw) throws, we need to revert
                // synchronizationContext. If that throws, we'll be throwing an ex during an exception
                // unwind. That's OK - we'll just have nested exceptions.
                sysw.Undo();
            }

            // restore the saved Execution Context
            Thread.CurrentThread.SetExecutionContext(prevEC);
            thread = null; // this will prevent the switcher object being used again
        }