//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities { using System.Runtime; using System.Threading; static class SynchronizationContextHelper { static WFDefaultSynchronizationContext defaultContext; public static SynchronizationContext GetDefaultSynchronizationContext() { if (SynchronizationContextHelper.defaultContext == null) { SynchronizationContextHelper.defaultContext = new WFDefaultSynchronizationContext(); } return SynchronizationContextHelper.defaultContext; } public static SynchronizationContext CloneSynchronizationContext(SynchronizationContext context) { Fx.Assert(context != null, "null context parameter"); WFDefaultSynchronizationContext wfDefaultContext = context as WFDefaultSynchronizationContext; if (wfDefaultContext != null) { Fx.Assert(SynchronizationContextHelper.defaultContext != null, "We must have set the static member by now!"); return SynchronizationContextHelper.defaultContext; } else { return context.CreateCopy(); } } class WFDefaultSynchronizationContext : SynchronizationContext { public WFDefaultSynchronizationContext() { } public override void Post(SendOrPostCallback d, object state) { ActionItem.Schedule(delegate(object s) { d(s); }, state); } public override void Send(SendOrPostCallback d, object state) { d(state); } } } }