Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Filters / SynchronizationFilter.cs / 1305376 / SynchronizationFilter.cs
// **************************************************************************** // Copyright (C) 2000-2001 Microsoft Corporation. All rights reserved. // // CONTENTS // Synchronization Interceptor/Filter Executor // // DESCRIPTION // // *************************************************************************** namespace System.Workflow.ComponentModel { using System; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Workflow.ComponentModel.Design; internal sealed class SynchronizationFilter : ActivityExecutionFilter, IActivityEventListener, IActivityEventListener { public override ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (activity == null) throw new ArgumentNullException("activity"); //Make sure first thing we do is hold lock on StatusChange. activity.RegisterForStatusChange(Activity.LockCountOnStatusChangeChangedEvent, this); activity.HoldLockOnStatusChange(this); if (executionContext.AcquireLocks(this)) return ExecuteActivityNow(executionContext); return activity.ExecutionStatus; } private ActivityExecutionStatus ExecuteActivityNow(ActivityExecutionContext context) { return ((ActivityExecutor)NextActivityExecutorInChain(context.Activity)).Execute(context.Activity, context); } #region IActivityEventListener Members public void OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { ActivityExecutionContext context = sender as ActivityExecutionContext; if (context.Activity.HasPrimaryClosed && context.Activity.LockCountOnStatusChange == 1) { // release locks and status change locks context.ReleaseLocks(false); context.Activity.UnregisterForStatusChange(Activity.LockCountOnStatusChangeChangedEvent, this); context.Activity.ReleaseLockOnStatusChange(this); } } #endregion #region IActivityEventListener Members public void OnEvent(object sender, EventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; // only if activity is still executing, then run it if (context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) { ActivityExecutionStatus newStatus = ExecuteActivityNow(context); if (newStatus == ActivityExecutionStatus.Closed) context.CloseActivity(); } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. // **************************************************************************** // Copyright (C) 2000-2001 Microsoft Corporation. All rights reserved. // // CONTENTS // Synchronization Interceptor/Filter Executor // // DESCRIPTION // // *************************************************************************** namespace System.Workflow.ComponentModel { using System; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Workflow.ComponentModel.Design; internal sealed class SynchronizationFilter : ActivityExecutionFilter, IActivityEventListener , IActivityEventListener { public override ActivityExecutionStatus Execute(Activity activity, ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (activity == null) throw new ArgumentNullException("activity"); //Make sure first thing we do is hold lock on StatusChange. activity.RegisterForStatusChange(Activity.LockCountOnStatusChangeChangedEvent, this); activity.HoldLockOnStatusChange(this); if (executionContext.AcquireLocks(this)) return ExecuteActivityNow(executionContext); return activity.ExecutionStatus; } private ActivityExecutionStatus ExecuteActivityNow(ActivityExecutionContext context) { return ((ActivityExecutor)NextActivityExecutorInChain(context.Activity)).Execute(context.Activity, context); } #region IActivityEventListener Members public void OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { ActivityExecutionContext context = sender as ActivityExecutionContext; if (context.Activity.HasPrimaryClosed && context.Activity.LockCountOnStatusChange == 1) { // release locks and status change locks context.ReleaseLocks(false); context.Activity.UnregisterForStatusChange(Activity.LockCountOnStatusChangeChangedEvent, this); context.Activity.ReleaseLockOnStatusChange(this); } } #endregion #region IActivityEventListener Members public void OnEvent(object sender, EventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; // only if activity is still executing, then run it if (context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) { ActivityExecutionStatus newStatus = ExecuteActivityNow(context); if (newStatus == ActivityExecutionStatus.Closed) context.CloseActivity(); } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SRDisplayNameAttribute.cs
- SafeHGlobalHandleCritical.cs
- VarInfo.cs
- TopClause.cs
- DesignerInterfaces.cs
- Events.cs
- WeakReferenceList.cs
- OperationInvokerTrace.cs
- CodeTypeConstructor.cs
- FunctionDetailsReader.cs
- SortDescription.cs
- MULTI_QI.cs
- Clock.cs
- GeometryGroup.cs
- ServiceReflector.cs
- Registry.cs
- SHA256CryptoServiceProvider.cs
- BuildProvidersCompiler.cs
- securitymgrsite.cs
- DrawingContextDrawingContextWalker.cs
- XsdValidatingReader.cs
- _KerberosClient.cs
- HyperLinkStyle.cs
- WeakReferenceKey.cs
- DataGridItem.cs
- FileReservationCollection.cs
- CoreChannel.cs
- PlatformCulture.cs
- DBConcurrencyException.cs
- ProviderBase.cs
- ArrayConverter.cs
- DbBuffer.cs
- TextTreeRootNode.cs
- FileDetails.cs
- ECDsaCng.cs
- FontInfo.cs
- BoundingRectTracker.cs
- HeaderedItemsControl.cs
- ObjectSecurity.cs
- ExpressionStringBuilder.cs
- XmlQueryRuntime.cs
- DbDataSourceEnumerator.cs
- ProcessModuleDesigner.cs
- WebPartDeleteVerb.cs
- ControlIdConverter.cs
- LineSegment.cs
- GZipStream.cs
- DynamicControl.cs
- HandlerBase.cs
- IgnoreFileBuildProvider.cs
- Unit.cs
- CustomAttributeBuilder.cs
- DataGridViewRowPostPaintEventArgs.cs
- StringPropertyBuilder.cs
- SystemException.cs
- TagPrefixCollection.cs
- SQLMoneyStorage.cs
- UpdatePanelTriggerCollection.cs
- ExtensionFile.cs
- SafeTokenHandle.cs
- WindowsFont.cs
- SchemaNotation.cs
- DtdParser.cs
- PolicyStatement.cs
- Marshal.cs
- RectangleHotSpot.cs
- FocusManager.cs
- OptimisticConcurrencyException.cs
- ISCIIEncoding.cs
- TextPattern.cs
- WebResourceAttribute.cs
- _SslSessionsCache.cs
- SmiTypedGetterSetter.cs
- UnaryNode.cs
- WFItemsToSpacerVisibility.cs
- JsonCollectionDataContract.cs
- VisualProxy.cs
- TypedTableBaseExtensions.cs
- RemoteWebConfigurationHost.cs
- PropertyConverter.cs
- ProviderBase.cs
- CheckBoxList.cs
- SafeBitVector32.cs
- SatelliteContractVersionAttribute.cs
- odbcmetadatacollectionnames.cs
- NamespaceList.cs
- basevalidator.cs
- PropertyMap.cs
- CommandDevice.cs
- RequestResizeEvent.cs
- TeredoHelper.cs
- SubpageParagraph.cs
- ServiceContractAttribute.cs
- WindowPattern.cs
- ComponentResourceKeyConverter.cs
- WebPartMinimizeVerb.cs
- WrappedIUnknown.cs
- EventManager.cs
- ParameterExpression.cs
- SwitchLevelAttribute.cs