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
- UnauthorizedWebPart.cs
- ScrollItemPatternIdentifiers.cs
- FileUpload.cs
- EdgeModeValidation.cs
- DesignerObjectListAdapter.cs
- WebAdminConfigurationHelper.cs
- UnsafeNativeMethods.cs
- HelpOperationInvoker.cs
- PrinterResolution.cs
- DefaultObjectMappingItemCollection.cs
- FormatVersion.cs
- UnsafeNativeMethods.cs
- DesignerTransactionCloseEvent.cs
- FontUnitConverter.cs
- StylusDownEventArgs.cs
- CorruptStoreException.cs
- DefaultIfEmptyQueryOperator.cs
- CatalogPart.cs
- VideoDrawing.cs
- Int32Converter.cs
- DispatcherProcessingDisabled.cs
- SqlClientFactory.cs
- ValidationEventArgs.cs
- UnsafeNativeMethods.cs
- QilXmlWriter.cs
- WindowsEditBoxRange.cs
- OperandQuery.cs
- ConditionValidator.cs
- SecurityException.cs
- Parser.cs
- StringAnimationBase.cs
- StatusBarItem.cs
- ItemCheckedEvent.cs
- XmlQualifiedNameTest.cs
- UriScheme.cs
- Size3DValueSerializer.cs
- ProcessDesigner.cs
- XappLauncher.cs
- CodePageEncoding.cs
- SqlDataSourceFilteringEventArgs.cs
- InvokeMemberBinder.cs
- _AutoWebProxyScriptEngine.cs
- ProcessProtocolHandler.cs
- OleDbWrapper.cs
- OdbcEnvironmentHandle.cs
- Int32Animation.cs
- BindingContext.cs
- WinEventWrap.cs
- ControllableStoryboardAction.cs
- Baml2006ReaderContext.cs
- InstanceLockedException.cs
- FormParameter.cs
- MouseOverProperty.cs
- StorageRoot.cs
- UnicodeEncoding.cs
- DependencyObjectType.cs
- PieceDirectory.cs
- ConstructorNeedsTagAttribute.cs
- IBuiltInEvidence.cs
- BevelBitmapEffect.cs
- InternalEnumValidator.cs
- ScriptingProfileServiceSection.cs
- Facet.cs
- X509SecurityTokenAuthenticator.cs
- IDReferencePropertyAttribute.cs
- LocalValueEnumerator.cs
- BuildManager.cs
- coordinatorfactory.cs
- SubMenuStyleCollection.cs
- _FtpDataStream.cs
- JsonObjectDataContract.cs
- FocusWithinProperty.cs
- Trigger.cs
- XmlBinaryReader.cs
- QueryStringParameter.cs
- ExpressionReplacer.cs
- GridViewColumn.cs
- SystemDiagnosticsSection.cs
- _HTTPDateParse.cs
- Math.cs
- MaskDescriptor.cs
- DataServiceContext.cs
- DataFormats.cs
- ITextView.cs
- BmpBitmapDecoder.cs
- TypePropertyEditor.cs
- TabItem.cs
- WorkflowDesignerMessageFilter.cs
- DataTableNameHandler.cs
- BaseParser.cs
- ConnectionManagementElementCollection.cs
- CompilationPass2TaskInternal.cs
- HttpMethodConstraint.cs
- WebBrowserDesigner.cs
- ObjectDataSourceView.cs
- MembershipValidatePasswordEventArgs.cs
- StrongTypingException.cs
- AdapterDictionary.cs
- DrawingAttributes.cs
- Panel.cs