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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TdsParserHelperClasses.cs
- DetailsViewInsertedEventArgs.cs
- BitStack.cs
- CultureInfo.cs
- CalendarDay.cs
- ModuleBuilderData.cs
- CodeCompiler.cs
- AnnotationMap.cs
- SynchronizedKeyedCollection.cs
- HttpListenerException.cs
- FontStretchConverter.cs
- XmlJsonReader.cs
- ProgressBar.cs
- XPathDocumentIterator.cs
- XslAst.cs
- ElementMarkupObject.cs
- RSAProtectedConfigurationProvider.cs
- ConfigurationManagerHelper.cs
- FixedSOMTable.cs
- MailAddress.cs
- _DomainName.cs
- XmlReflectionMember.cs
- Validator.cs
- DbParameterCollectionHelper.cs
- InitializerFacet.cs
- TemplatedWizardStep.cs
- FileLevelControlBuilderAttribute.cs
- SqlDataSourceQuery.cs
- BamlMapTable.cs
- BoundField.cs
- InfoCardSymmetricAlgorithm.cs
- MultilineStringConverter.cs
- Error.cs
- TextRangeEdit.cs
- MiniAssembly.cs
- CompositeScriptReferenceEventArgs.cs
- NewArrayExpression.cs
- CanonicalFontFamilyReference.cs
- PersonalizationStateQuery.cs
- ToolboxBitmapAttribute.cs
- ClientSettingsStore.cs
- HttpEncoderUtility.cs
- XmlAttributeCollection.cs
- IPAddress.cs
- HandoffBehavior.cs
- ConfigurationValidatorBase.cs
- BlockingCollection.cs
- Regex.cs
- QuotedPairReader.cs
- WindowsStatusBar.cs
- FocusWithinProperty.cs
- ProtocolState.cs
- SessionEndingEventArgs.cs
- RelationshipType.cs
- HijriCalendar.cs
- ScriptMethodAttribute.cs
- DeviceContext2.cs
- WindowsUpDown.cs
- RTTrackingProfile.cs
- ListDictionary.cs
- ResourceCategoryAttribute.cs
- DataControlPagerLinkButton.cs
- FormatStringEditor.cs
- RegionIterator.cs
- WindowHideOrCloseTracker.cs
- ServicesUtilities.cs
- SynchronizedDispatch.cs
- DataGridAutoGeneratingColumnEventArgs.cs
- GlyphRunDrawing.cs
- UnSafeCharBuffer.cs
- DispatchWrapper.cs
- DriveInfo.cs
- GenericEnumerator.cs
- ServiceDescriptionReflector.cs
- ClientUrlResolverWrapper.cs
- ProviderConnectionPointCollection.cs
- InitializerFacet.cs
- WindowsToolbar.cs
- BindingCollection.cs
- GridPattern.cs
- WebSysDefaultValueAttribute.cs
- FieldNameLookup.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- AuthenticationModulesSection.cs
- XmlDataDocument.cs
- SignHashRequest.cs
- PrintingPermissionAttribute.cs
- datacache.cs
- BaseTemplateParser.cs
- SystemIPGlobalStatistics.cs
- XmlSchemaAny.cs
- NonVisualControlAttribute.cs
- MemoryStream.cs
- XXXInfos.cs
- ObjectListSelectEventArgs.cs
- BufferedStream.cs
- PriorityBindingExpression.cs
- StrongNameIdentityPermission.cs
- WorkflowInstanceExtensionProvider.cs
- DetailsViewPagerRow.cs