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
- _StreamFramer.cs
- ControlAdapter.cs
- remotingproxy.cs
- CommandField.cs
- RelationshipConverter.cs
- ControlBindingsConverter.cs
- _NTAuthentication.cs
- SecureUICommand.cs
- ReflectionPermission.cs
- CommandSet.cs
- CompilerScope.cs
- BamlTreeNode.cs
- OdbcError.cs
- TransactionBridgeSection.cs
- ReaderOutput.cs
- complextypematerializer.cs
- webeventbuffer.cs
- ComplexObject.cs
- TypeExtensionConverter.cs
- SqlProfileProvider.cs
- ExpandCollapsePattern.cs
- SqlVersion.cs
- DatatypeImplementation.cs
- DefaultEventAttribute.cs
- CompilerResults.cs
- MailWriter.cs
- HttpNamespaceReservationInstallComponent.cs
- DataListItem.cs
- BuildResult.cs
- PreviewPageInfo.cs
- GenerateTemporaryTargetAssembly.cs
- ConnectionStringSettingsCollection.cs
- OdbcError.cs
- StylusEventArgs.cs
- ComponentDispatcher.cs
- SiteMapPath.cs
- DictionaryGlobals.cs
- FontNamesConverter.cs
- HybridDictionary.cs
- ServiceModelStringsVersion1.cs
- InputEventArgs.cs
- DataTemplateSelector.cs
- CompilerGeneratedAttribute.cs
- UnmanagedHandle.cs
- Int32Rect.cs
- ConfigurationStrings.cs
- GlyphingCache.cs
- ConfigsHelper.cs
- ImageSourceValueSerializer.cs
- SequenceNumber.cs
- TagMapInfo.cs
- ContractNamespaceAttribute.cs
- IProducerConsumerCollection.cs
- streamingZipPartStream.cs
- DeclarativeCatalogPart.cs
- StandardMenuStripVerb.cs
- TextBreakpoint.cs
- MessageQueuePermissionEntryCollection.cs
- GridToolTip.cs
- TrustManager.cs
- SafeViewOfFileHandle.cs
- XamlDesignerSerializationManager.cs
- ListCommandEventArgs.cs
- WebPartMenuStyle.cs
- WebServiceEnumData.cs
- ListViewItemSelectionChangedEvent.cs
- DataException.cs
- ActivityMarkupSerializationProvider.cs
- QilGeneratorEnv.cs
- ImageMapEventArgs.cs
- Comparer.cs
- StateBag.cs
- PreservationFileWriter.cs
- Matrix.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- InputReportEventArgs.cs
- SafeFileMapViewHandle.cs
- Stack.cs
- BitmapScalingModeValidation.cs
- Calendar.cs
- HatchBrush.cs
- MatrixIndependentAnimationStorage.cs
- TableSectionStyle.cs
- CfgParser.cs
- HostingEnvironmentException.cs
- PersonalizablePropertyEntry.cs
- _emptywebproxy.cs
- MissingManifestResourceException.cs
- DispatcherHooks.cs
- MobileTextWriter.cs
- XmlSchemaSequence.cs
- StyleSheetRefUrlEditor.cs
- DescriptionAttribute.cs
- RegexInterpreter.cs
- SchemaConstraints.cs
- ScrollBarAutomationPeer.cs
- ListenerElementsCollection.cs
- XmlDomTextWriter.cs
- IIS7WorkerRequest.cs
- CodeFieldReferenceExpression.cs