public void Uninstall() { if (this.Instance != null) { PdnSynchronizationContext.Uninstall(this.Instance); this.Instance = null; } }
internal static void Uninstall(PdnSynchronizationContext oldInstance) { if (oldInstance != instance) { ExceptionUtil.ThrowInvalidOperationException(); } if (oldInstance.syncThread != Thread.CurrentThread) { ExceptionUtil.ThrowInvalidOperationException("PdnSynchronizationContext may only be uninstalled on the thread it was installed on"); } oldInstance.ProcessQueue(); SynchronizationContext.SetSynchronizationContext(oldInstance.prevSyncContext); oldInstance.isInstalled = false; }
public static PdnSynchronizationContextController Install(WaitForMultipleObjectsExDelegate waitForMultipleObjectsExCallback, SleepExDelegate sleepExCallback) { SynchronizationContext current = SynchronizationContext.Current; if (current == null) { ExceptionUtil.ThrowInvalidOperationException("An SynchronizationContext must already be installed before PdnSynchronizationContext may be installed"); } PdnSynchronizationContext context = new PdnSynchronizationContext(current, waitForMultipleObjectsExCallback, sleepExCallback); if (Interlocked.CompareExchange <PdnSynchronizationContext>(ref instance, context, null) != null) { ExceptionUtil.ThrowInvalidOperationException("Install() may only be called once"); } SynchronizationContext.SetSynchronizationContext(context); context.isInstalled = true; return(new PdnSynchronizationContextController(context)); }
internal PdnSynchronizationContextController(PdnSynchronizationContext instance) { this.Instance = instance; }