Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SecurityCriticalDataForSet.cs
- CategoryNameCollection.cs
- UInt32Storage.cs
- SourceFileInfo.cs
- SystemIPGlobalProperties.cs
- DSASignatureFormatter.cs
- MenuRenderer.cs
- QuotedStringFormatReader.cs
- CodeAttributeArgumentCollection.cs
- EntityViewContainer.cs
- XhtmlBasicValidatorAdapter.cs
- VersionPair.cs
- SystemThemeKey.cs
- WebPartAddingEventArgs.cs
- UIElement3D.cs
- AudioSignalProblemOccurredEventArgs.cs
- MetadataArtifactLoaderFile.cs
- CatalogZoneBase.cs
- UntrustedRecipientException.cs
- ServiceHttpHandlerFactory.cs
- Win32PrintDialog.cs
- SystemIPInterfaceProperties.cs
- TemplateParser.cs
- TargetPerspective.cs
- ComMethodElementCollection.cs
- NestedContainer.cs
- PageResolution.cs
- ToolStripDropDownClosedEventArgs.cs
- ItemChangedEventArgs.cs
- TextUtf8RawTextWriter.cs
- Camera.cs
- XmlBinaryReader.cs
- TextBreakpoint.cs
- RegisteredArrayDeclaration.cs
- BindingUtils.cs
- ProfileSection.cs
- ObjectContext.cs
- CachedBitmap.cs
- MessageContractAttribute.cs
- ScriptServiceAttribute.cs
- WebHttpBindingElement.cs
- MasterPageCodeDomTreeGenerator.cs
- LambdaCompiler.Expressions.cs
- DetailsViewUpdatedEventArgs.cs
- RowBinding.cs
- CommandEventArgs.cs
- DictionaryEntry.cs
- ConfigDefinitionUpdates.cs
- WebPartEditorApplyVerb.cs
- DebugViewWriter.cs
- ContourSegment.cs
- Zone.cs
- ProvidersHelper.cs
- RequiredAttributeAttribute.cs
- SqlDataSourceFilteringEventArgs.cs
- TreeNodeCollectionEditor.cs
- DataObject.cs
- CorrelationManager.cs
- SqlServices.cs
- InstanceOwnerException.cs
- SQlBooleanStorage.cs
- SelectionProcessor.cs
- ProfilePropertyMetadata.cs
- TdsValueSetter.cs
- TextParagraphView.cs
- MachineSettingsSection.cs
- BuildResult.cs
- XmlSortKeyAccumulator.cs
- SecureUICommand.cs
- ListViewGroupCollectionEditor.cs
- TranslateTransform.cs
- DiagnosticsConfiguration.cs
- MaskInputRejectedEventArgs.cs
- QuaternionRotation3D.cs
- XmlStreamNodeWriter.cs
- Common.cs
- DataServiceRequestException.cs
- XsltConvert.cs
- TableRow.cs
- CalloutQueueItem.cs
- SAPICategories.cs
- ListBoxAutomationPeer.cs
- RouteParser.cs
- CollectionChangedEventManager.cs
- HttpModulesSection.cs
- IPAddress.cs
- WaitHandleCannotBeOpenedException.cs
- ResourceManager.cs
- ServiceThrottlingBehavior.cs
- CookielessHelper.cs
- PrintControllerWithStatusDialog.cs
- WorkflowRuntimeEndpoint.cs
- EmptyEnumerator.cs
- HttpCapabilitiesSectionHandler.cs
- TextOptions.cs
- BoundColumn.cs
- ButtonPopupAdapter.cs
- CodeBlockBuilder.cs
- ObjectDataProvider.cs
- TextServicesContext.cs