internal static SynchronizationContextSwitcher SetSynchronizationContext(SynchronizationContext syncContext, SynchronizationContext prevSyncContext) { // get current execution context ExecutionContext ec = Thread.CurrentThread.ExecutionContext; // create a swticher SynchronizationContextSwitcher scsw = new SynchronizationContextSwitcher(); RuntimeHelpers.PrepareConstrainedRegions(); try { // attach the switcher to the exec context scsw._ec = ec; // save the current sync context using the passed in value scsw.savedSC = prevSyncContext; // save the new sync context also scsw.currSC = syncContext; // update the current sync context to the new context ec.SynchronizationContext = syncContext; } catch { // Any exception means we just restore the old SyncCtx scsw.UndoNoThrow(); //No exception will be thrown in this Undo() throw; } // return switcher return(scsw); }
internal static SynchronizationContextSwitcher SetSynchronizationContext(SynchronizationContext syncContext, SynchronizationContext prevSyncContext) { ExecutionContext executionContext = Thread.CurrentThread.ExecutionContext; SynchronizationContextSwitcher switcher = new SynchronizationContextSwitcher(); RuntimeHelpers.PrepareConstrainedRegions(); try { switcher._ec = executionContext; switcher.savedSC = prevSyncContext; switcher.currSC = syncContext; executionContext.SynchronizationContext = syncContext; } catch { switcher.UndoNoThrow(); throw; } return switcher; }
internal static SynchronizationContextSwitcher SetSynchronizationContext(SynchronizationContext syncContext, SynchronizationContext prevSyncContext) { ExecutionContext executionContext = Thread.CurrentThread.ExecutionContext; SynchronizationContextSwitcher switcher = new SynchronizationContextSwitcher(); RuntimeHelpers.PrepareConstrainedRegions(); try { switcher._ec = executionContext; switcher.savedSC = prevSyncContext; switcher.currSC = syncContext; executionContext.SynchronizationContext = syncContext; } catch { switcher.UndoNoThrow(); throw; } return(switcher); }
internal static SynchronizationContextSwitcher SetSynchronizationContext(SynchronizationContext syncContext, SynchronizationContext prevSyncContext) { // get current execution context ExecutionContext ec = Thread.CurrentThread.ExecutionContext; // create a swticher SynchronizationContextSwitcher scsw = new SynchronizationContextSwitcher(); RuntimeHelpers.PrepareConstrainedRegions(); try { // attach the switcher to the exec context scsw._ec = ec; // save the current sync context using the passed in value scsw.savedSC = prevSyncContext; // save the new sync context also scsw.currSC = syncContext; // update the current sync context to the new context ec.SynchronizationContext = syncContext; } catch { // Any exception means we just restore the old SyncCtx scsw.UndoNoThrow(); //No exception will be thrown in this Undo() throw; } // return switcher return scsw; }