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
- PropertyValueEditor.cs
- CancelAsyncOperationRequest.cs
- RegexMatchCollection.cs
- LazyTextWriterCreator.cs
- Popup.cs
- ComponentCommands.cs
- MetadataArtifactLoaderFile.cs
- ListViewEditEventArgs.cs
- AxHost.cs
- EditingMode.cs
- CalloutQueueItem.cs
- FrameworkObject.cs
- DbConnectionPool.cs
- NodeLabelEditEvent.cs
- FixedPage.cs
- BookmarkNameHelper.cs
- DiscoveryMessageSequence11.cs
- SoapReflectionImporter.cs
- PreloadedPackages.cs
- StyleHelper.cs
- LabelEditEvent.cs
- FormsAuthenticationUser.cs
- RequestTimeoutManager.cs
- IisTraceWebEventProvider.cs
- DesignerVerb.cs
- XmlSchemaComplexContentExtension.cs
- ReferencedCollectionType.cs
- Baml6ConstructorInfo.cs
- BoolExpr.cs
- FileUtil.cs
- StorageMappingItemCollection.cs
- SqlProviderServices.cs
- AutomationProperty.cs
- XmlILTrace.cs
- newinstructionaction.cs
- CompressEmulationStream.cs
- HitTestParameters.cs
- CodeIndexerExpression.cs
- SystemUdpStatistics.cs
- ObjectParameter.cs
- ImmutableCollection.cs
- CodeEntryPointMethod.cs
- RadialGradientBrush.cs
- WindowsPrincipal.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- DataGridViewCellCancelEventArgs.cs
- XmlAutoDetectWriter.cs
- NetNamedPipeBinding.cs
- SafeThreadHandle.cs
- ExpressionPrefixAttribute.cs
- EntitySetDataBindingList.cs
- HtmlInputControl.cs
- MsdtcClusterUtils.cs
- MarshalDirectiveException.cs
- Image.cs
- DrawingVisualDrawingContext.cs
- CacheMode.cs
- IdentifierCollection.cs
- SelectionRange.cs
- Misc.cs
- ComplexTypeEmitter.cs
- BoolExpr.cs
- SystemKeyConverter.cs
- FunctionDetailsReader.cs
- ClusterSafeNativeMethods.cs
- RegistryExceptionHelper.cs
- ThreadSafeMessageFilterTable.cs
- DefaultTextStoreTextComposition.cs
- PathGradientBrush.cs
- WebPartsPersonalizationAuthorization.cs
- ButtonBaseAdapter.cs
- WebConvert.cs
- NoneExcludedImageIndexConverter.cs
- Exception.cs
- GridLengthConverter.cs
- QueryTreeBuilder.cs
- PromptStyle.cs
- NullableLongSumAggregationOperator.cs
- SpellerStatusTable.cs
- ExtensionQuery.cs
- WebMessageFormatHelper.cs
- RequestTimeoutManager.cs
- HScrollBar.cs
- HandleCollector.cs
- AutomationFocusChangedEventArgs.cs
- GridSplitter.cs
- EntityDataSourceContextCreatedEventArgs.cs
- SystemIcons.cs
- ScaleTransform.cs
- ToolStripPanelCell.cs
- TrustSection.cs
- OleDbInfoMessageEvent.cs
- MissingManifestResourceException.cs
- PageAdapter.cs
- TemplateColumn.cs
- EdgeProfileValidation.cs
- ServiceModelEnumValidator.cs
- StackSpiller.Generated.cs
- DispatcherExceptionFilterEventArgs.cs
- LabelExpression.cs