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
- counter.cs
- Accessors.cs
- Set.cs
- TextFormatterHost.cs
- SqlTriggerContext.cs
- VarInfo.cs
- OleDbCommandBuilder.cs
- SymbolDocumentGenerator.cs
- ReferencedCollectionType.cs
- PackWebRequestFactory.cs
- NativeObjectSecurity.cs
- StringAnimationBase.cs
- AncillaryOps.cs
- EntitySetBase.cs
- WindowsAuthenticationEventArgs.cs
- ToolBarButtonClickEvent.cs
- JsonServiceDocumentSerializer.cs
- UnsafeNativeMethodsMilCoreApi.cs
- TypeExtensionConverter.cs
- NullableIntSumAggregationOperator.cs
- EdmEntityTypeAttribute.cs
- BaseValidatorDesigner.cs
- DefaultHttpHandler.cs
- ApplicationId.cs
- BooleanFacetDescriptionElement.cs
- ASCIIEncoding.cs
- MasterPageParser.cs
- CatalogPart.cs
- MenuStrip.cs
- QilXmlWriter.cs
- _SslState.cs
- SettingsPropertyNotFoundException.cs
- PathGeometry.cs
- ProfileSettings.cs
- ThaiBuddhistCalendar.cs
- AlignmentYValidation.cs
- DataGridViewAutoSizeModeEventArgs.cs
- GCHandleCookieTable.cs
- ExpressionBuilder.cs
- ExpressionParser.cs
- FilterQuery.cs
- SettingsContext.cs
- SqlConnectionPoolProviderInfo.cs
- ProjectionCamera.cs
- BamlVersionHeader.cs
- __Filters.cs
- SignedInfo.cs
- EnumType.cs
- TimeBoundedCache.cs
- WebHttpBindingCollectionElement.cs
- MailWebEventProvider.cs
- RecommendedAsConfigurableAttribute.cs
- ZeroOpNode.cs
- LiteralSubsegment.cs
- SecurityKeyType.cs
- URI.cs
- InfoCardHelper.cs
- sitestring.cs
- StorageComplexPropertyMapping.cs
- peersecurityelement.cs
- HitTestResult.cs
- WorkflowInstanceExtensionManager.cs
- ExeContext.cs
- SchemaContext.cs
- Number.cs
- DbDataAdapter.cs
- _KerberosClient.cs
- XmlProcessingInstruction.cs
- DataRelation.cs
- DesignerEditorPartChrome.cs
- ActivityExecutionWorkItem.cs
- ContainerFilterService.cs
- TypeDependencyAttribute.cs
- DataGridViewHeaderCell.cs
- TraceEventCache.cs
- MemberExpressionHelper.cs
- HashCoreRequest.cs
- XmlAttributeOverrides.cs
- ZipArchive.cs
- BoolExpressionVisitors.cs
- SerialErrors.cs
- FontStretch.cs
- OleStrCAMarshaler.cs
- Label.cs
- XmlName.cs
- JsonServiceDocumentSerializer.cs
- SqlUserDefinedAggregateAttribute.cs
- SecurityVersion.cs
- lengthconverter.cs
- FloatMinMaxAggregationOperator.cs
- Int32Animation.cs
- KeyBinding.cs
- DockingAttribute.cs
- PrintDialog.cs
- DrawingCollection.cs
- IPCCacheManager.cs
- RadialGradientBrush.cs
- DoubleAnimationUsingKeyFrames.cs
- DataGridTextBox.cs
- RotateTransform.cs