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
- PieceDirectory.cs
- ColumnResult.cs
- BookmarkWorkItem.cs
- TextServicesProperty.cs
- EffectiveValueEntry.cs
- SortFieldComparer.cs
- StrongNameUtility.cs
- XmlSchemaImporter.cs
- AssertSection.cs
- ValidationRule.cs
- InternalCache.cs
- MessageSmuggler.cs
- PageThemeBuildProvider.cs
- CriticalFinalizerObject.cs
- InlineObject.cs
- FixedTextPointer.cs
- ScrollEvent.cs
- SmtpSection.cs
- PartitionerStatic.cs
- DeclarativeCatalogPart.cs
- PrintEvent.cs
- SystemNetHelpers.cs
- DebugControllerThread.cs
- EncoderReplacementFallback.cs
- AuthStoreRoleProvider.cs
- DataGridHeaderBorder.cs
- AnnotationHighlightLayer.cs
- MDIWindowDialog.cs
- XmlDocumentType.cs
- RequestResizeEvent.cs
- TreeIterator.cs
- XmlNamespaceMappingCollection.cs
- PropertyConverter.cs
- GetCryptoTransformRequest.cs
- ConfigXmlAttribute.cs
- MetadataAssemblyHelper.cs
- InheritanceContextHelper.cs
- XNodeValidator.cs
- StylusPoint.cs
- MenuItemBinding.cs
- KeyedHashAlgorithm.cs
- NativeMethods.cs
- TdsParser.cs
- CompiledQuery.cs
- ObjectConverter.cs
- TdsEnums.cs
- XmlSchemaSimpleContentRestriction.cs
- EnterpriseServicesHelper.cs
- XmlIterators.cs
- PageAdapter.cs
- ContentElementAutomationPeer.cs
- MissingManifestResourceException.cs
- XmlUtil.cs
- TextTreeTextElementNode.cs
- DocumentXPathNavigator.cs
- CodeNamespaceImportCollection.cs
- ApplicationManager.cs
- HttpPostedFileBase.cs
- DataKeyCollection.cs
- ComAwareEventInfo.cs
- VerificationException.cs
- FlowchartDesigner.Helpers.cs
- CacheModeValueSerializer.cs
- ClientApiGenerator.cs
- TimeoutValidationAttribute.cs
- MessageQueueCriteria.cs
- Utility.cs
- FilterFactory.cs
- HtmlInputButton.cs
- CodeMemberEvent.cs
- ZipIOCentralDirectoryFileHeader.cs
- InputManager.cs
- WithParamAction.cs
- TypedTableHandler.cs
- References.cs
- bindurihelper.cs
- PropertyCondition.cs
- safemediahandle.cs
- XmlSchemaObject.cs
- MatrixAnimationUsingPath.cs
- Compress.cs
- NonVisualControlAttribute.cs
- NativeMethods.cs
- DataGridCellClipboardEventArgs.cs
- ReflectEventDescriptor.cs
- CodeGroup.cs
- AsyncPostBackErrorEventArgs.cs
- WebUtil.cs
- ComponentSerializationService.cs
- ToolStripManager.cs
- WorkflowRuntimeServiceElementCollection.cs
- QilBinary.cs
- BamlLocalizableResource.cs
- SqlTransaction.cs
- FilterQueryOptionExpression.cs
- GeneralTransform3D.cs
- BooleanProjectedSlot.cs
- TextEditorParagraphs.cs
- LinearKeyFrames.cs
- ImportDesigner.xaml.cs