Ejemplo n.º 1
0
 public void Uninstall()
 {
     if (this.Instance != null)
     {
         PdnSynchronizationContext.Uninstall(this.Instance);
         this.Instance = null;
     }
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
 internal PdnSynchronizationContextController(PdnSynchronizationContext instance)
 {
     this.Instance = instance;
 }