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
- TraceContextEventArgs.cs
- PKCS1MaskGenerationMethod.cs
- util.cs
- PropertyPathConverter.cs
- GenericRootAutomationPeer.cs
- FontDialog.cs
- DeclaredTypeValidator.cs
- RuleSettings.cs
- DataExpression.cs
- ProfileBuildProvider.cs
- DigestComparer.cs
- SoapProtocolImporter.cs
- Document.cs
- PageHandlerFactory.cs
- ChtmlImageAdapter.cs
- ColorTransformHelper.cs
- loginstatus.cs
- XamlTreeBuilderBamlRecordWriter.cs
- SQLDecimalStorage.cs
- HWStack.cs
- StyleXamlParser.cs
- TdsParserSessionPool.cs
- Quaternion.cs
- PanelDesigner.cs
- SafeBitVector32.cs
- TrustExchangeException.cs
- ContainerSelectorGlyph.cs
- LinkTarget.cs
- DesignTimeVisibleAttribute.cs
- BitmapVisualManager.cs
- LayoutEditorPart.cs
- ScrollEventArgs.cs
- NullableIntSumAggregationOperator.cs
- ConfigXmlWhitespace.cs
- ProcessMessagesAsyncResult.cs
- DescendantQuery.cs
- BuiltInExpr.cs
- ListControl.cs
- CompressStream.cs
- coordinator.cs
- XmlSchemaProviderAttribute.cs
- SmiSettersStream.cs
- DiscardableAttribute.cs
- SupportingTokenSecurityTokenResolver.cs
- XmlTypeMapping.cs
- InteropAutomationProvider.cs
- DataGridViewCellStyle.cs
- DbConnectionClosed.cs
- ComNativeDescriptor.cs
- Metafile.cs
- UIntPtr.cs
- BitmapEditor.cs
- ToolStripItemClickedEventArgs.cs
- Win32.cs
- ListControl.cs
- Substitution.cs
- Configuration.cs
- QilVisitor.cs
- TextDocumentView.cs
- ListViewSortEventArgs.cs
- RoutedEventConverter.cs
- ScriptMethodAttribute.cs
- TreeView.cs
- CompilerGeneratedAttribute.cs
- streamingZipPartStream.cs
- RegexWorker.cs
- AssemblyContextControlItem.cs
- QueueProcessor.cs
- CriticalHandle.cs
- ImageKeyConverter.cs
- Soap12ProtocolImporter.cs
- Debug.cs
- VScrollBar.cs
- ValidationSummary.cs
- DataGridCaption.cs
- UndirectedGraph.cs
- ObjectAnimationBase.cs
- ItemType.cs
- AutomationElementCollection.cs
- BaseDataListComponentEditor.cs
- RemoveFromCollection.cs
- ObjectTag.cs
- TextAutomationPeer.cs
- ToolStrip.cs
- DesignerListAdapter.cs
- Base64Encoding.cs
- BuiltInPermissionSets.cs
- DynamicValidator.cs
- XpsSerializationManager.cs
- RegexMatchCollection.cs
- EdmMember.cs
- XmlSignatureManifest.cs
- GreenMethods.cs
- CompositeDispatchFormatter.cs
- LongValidator.cs
- sqlstateclientmanager.cs
- CoordinationService.cs
- JsonClassDataContract.cs
- PersonalizationEntry.cs
- RequiredFieldValidator.cs