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
- WmfPlaceableFileHeader.cs
- HttpPostProtocolReflector.cs
- StringUtil.cs
- AuthenticatedStream.cs
- ServiceModelConfiguration.cs
- TextEditorMouse.cs
- VisualTarget.cs
- AutomationProperty.cs
- Sql8ConformanceChecker.cs
- WebHostScriptMappingsInstallComponent.cs
- ListComponentEditorPage.cs
- GridLength.cs
- SchemaLookupTable.cs
- WrappedKeySecurityToken.cs
- AutomationElementIdentifiers.cs
- InvokeBase.cs
- ZipIOBlockManager.cs
- XamlSerializer.cs
- WsatServiceCertificate.cs
- CellLabel.cs
- AnnotationComponentChooser.cs
- EventLogInformation.cs
- PropVariant.cs
- SoapSchemaExporter.cs
- MdbDataFileEditor.cs
- EntityDataSourceSelectedEventArgs.cs
- HttpRequestBase.cs
- RoleBoolean.cs
- CellCreator.cs
- IdentitySection.cs
- ThemeDirectoryCompiler.cs
- PixelShader.cs
- TypeExtension.cs
- HighContrastHelper.cs
- EmptyEnumerator.cs
- MatrixUtil.cs
- ReflectPropertyDescriptor.cs
- SimpleColumnProvider.cs
- AssociationSet.cs
- X509CertificateTokenFactoryCredential.cs
- LoadedOrUnloadedOperation.cs
- SoapAttributeAttribute.cs
- EntityDataSourceStatementEditorForm.cs
- ImageSource.cs
- ApplicationActivator.cs
- XmlAggregates.cs
- ApplicationFileParser.cs
- ConversionContext.cs
- ConfigXmlAttribute.cs
- WriteableBitmap.cs
- GACIdentityPermission.cs
- InternalBufferOverflowException.cs
- NameValueSectionHandler.cs
- BaseServiceProvider.cs
- DataKey.cs
- HtmlHead.cs
- CryptoConfig.cs
- HotCommands.cs
- SystemNetHelpers.cs
- SqlConnectionManager.cs
- TouchesOverProperty.cs
- ContextToken.cs
- XamlTreeBuilder.cs
- MarkupCompilePass1.cs
- SmtpAuthenticationManager.cs
- KeyValuePairs.cs
- SqlMethodTransformer.cs
- SerializationSectionGroup.cs
- Effect.cs
- Parsers.cs
- IssuanceLicense.cs
- MessageDroppedTraceRecord.cs
- XpsLiterals.cs
- BackoffTimeoutHelper.cs
- Bezier.cs
- TraceHandler.cs
- Hyperlink.cs
- TextCharacters.cs
- AppDomainAttributes.cs
- GroupBox.cs
- HttpChannelHelper.cs
- SafeLibraryHandle.cs
- MenuItem.cs
- DataGridViewCellValueEventArgs.cs
- MailBnfHelper.cs
- PointConverter.cs
- IndexOutOfRangeException.cs
- ExpandableObjectConverter.cs
- ActivityExecutionContext.cs
- HttpModuleCollection.cs
- ObjectPersistData.cs
- SchemaSetCompiler.cs
- PeerCredentialElement.cs
- ValidationErrorCollection.cs
- BooleanAnimationUsingKeyFrames.cs
- HttpListenerPrefixCollection.cs
- GridPattern.cs
- ConstructorNeedsTagAttribute.cs
- SafeNativeMethods.cs
- loginstatus.cs