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
- WebRequestModulesSection.cs
- RemotingConfigParser.cs
- URLIdentityPermission.cs
- Attributes.cs
- TargetControlTypeAttribute.cs
- SerializerWriterEventHandlers.cs
- AttributeCollection.cs
- UITypeEditor.cs
- ProfileManager.cs
- WebPartConnectionsConfigureVerb.cs
- HtmlInputReset.cs
- TransactionTraceIdentifier.cs
- CurrentChangedEventManager.cs
- CoreSwitches.cs
- SessionStateSection.cs
- GeneralTransform2DTo3D.cs
- StrongTypingException.cs
- PathGradientBrush.cs
- QilName.cs
- RayMeshGeometry3DHitTestResult.cs
- HTMLTextWriter.cs
- DescendantQuery.cs
- ConstructorNeedsTagAttribute.cs
- ViewStateException.cs
- PointUtil.cs
- IndexingContentUnit.cs
- XmlSchemaProviderAttribute.cs
- XmlDocumentFragment.cs
- InkCanvasInnerCanvas.cs
- SqlXmlStorage.cs
- UnsafeNativeMethodsPenimc.cs
- URL.cs
- NullPackagingPolicy.cs
- XmlQueryContext.cs
- MasterPage.cs
- LookupNode.cs
- RtType.cs
- ContextProperty.cs
- RequiredFieldValidator.cs
- HtmlProps.cs
- PermissionSet.cs
- XPathSingletonIterator.cs
- BindingNavigatorDesigner.cs
- MissingMemberException.cs
- PathFigureCollection.cs
- DataRelationPropertyDescriptor.cs
- TaskHelper.cs
- QuotedPrintableStream.cs
- FrugalList.cs
- VolatileResourceManager.cs
- Message.cs
- ContentElement.cs
- ICollection.cs
- DataReceivedEventArgs.cs
- SafeSystemMetrics.cs
- RegexFCD.cs
- Baml2006Reader.cs
- QilInvokeLateBound.cs
- HtmlLink.cs
- BoundColumn.cs
- ContainerUtilities.cs
- ComplexLine.cs
- OraclePermission.cs
- ParallelRangeManager.cs
- QueryRewriter.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- BinHexEncoder.cs
- BooleanConverter.cs
- RenderingBiasValidation.cs
- RNGCryptoServiceProvider.cs
- SynchronizedInputAdaptor.cs
- IndexedWhereQueryOperator.cs
- NavigateUrlConverter.cs
- DataGridViewCheckBoxCell.cs
- util.cs
- Compilation.cs
- StagingAreaInputItem.cs
- Command.cs
- ExpressionParser.cs
- DrawingGroup.cs
- SmtpDigestAuthenticationModule.cs
- FontNamesConverter.cs
- NegatedCellConstant.cs
- CheckBox.cs
- WebPartEditorCancelVerb.cs
- ExceptionNotification.cs
- TreeView.cs
- PropertyTabAttribute.cs
- TraceContextRecord.cs
- MatrixTransform3D.cs
- DataViewManagerListItemTypeDescriptor.cs
- TimeZoneNotFoundException.cs
- GroupQuery.cs
- DataViewListener.cs
- TextServicesHost.cs
- CellParaClient.cs
- FieldMetadata.cs
- DataGridState.cs
- MainMenu.cs
- SpeechEvent.cs