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
- TextEffectResolver.cs
- MimeReflector.cs
- PersistenceException.cs
- BinaryUtilClasses.cs
- DecoderReplacementFallback.cs
- CustomPeerResolverService.cs
- Convert.cs
- BitmapEffectGroup.cs
- MailDefinition.cs
- DataGridHelper.cs
- DetailsViewPageEventArgs.cs
- SspiNegotiationTokenAuthenticatorState.cs
- DbParameterCollectionHelper.cs
- TransformerTypeCollection.cs
- ProgressBarBrushConverter.cs
- ObjectReferenceStack.cs
- AsyncMethodInvoker.cs
- EventBookmark.cs
- FileIOPermission.cs
- WsatServiceCertificate.cs
- WriterOutput.cs
- Config.cs
- EntityViewGenerationAttribute.cs
- ServiceBusyException.cs
- DbDataRecord.cs
- RelatedPropertyManager.cs
- ShaderEffect.cs
- MembershipUser.cs
- CustomErrorsSectionWrapper.cs
- WebPartChrome.cs
- MenuStrip.cs
- Composition.cs
- glyphs.cs
- GeometryHitTestResult.cs
- ThicknessConverter.cs
- ZipPackagePart.cs
- PeerIPHelper.cs
- DebugView.cs
- SizeValueSerializer.cs
- ProgressBar.cs
- QueryUtil.cs
- JsonStringDataContract.cs
- sqlcontext.cs
- ChtmlPhoneCallAdapter.cs
- XmlCharCheckingWriter.cs
- Metadata.cs
- SQLDouble.cs
- GradientBrush.cs
- CollectionContainer.cs
- ConnectionStringsSection.cs
- SmiEventStream.cs
- CreateUserWizard.cs
- RegexWriter.cs
- Repeater.cs
- SourceItem.cs
- BrowserCapabilitiesCompiler.cs
- PrefixQName.cs
- RuntimeConfigLKG.cs
- SchemaTableOptionalColumn.cs
- ListControlConvertEventArgs.cs
- IRCollection.cs
- ScrollViewer.cs
- ElementUtil.cs
- SharedDp.cs
- PKCS1MaskGenerationMethod.cs
- DataGridViewImageCell.cs
- Clock.cs
- TextPointerBase.cs
- ProfileSection.cs
- DataGridViewTopRowAccessibleObject.cs
- HyperLink.cs
- FormViewPageEventArgs.cs
- CommonDialog.cs
- ReceiveContext.cs
- FileRegion.cs
- RecordBuilder.cs
- XPathNodeIterator.cs
- PersistencePipeline.cs
- StructuredProperty.cs
- DesigntimeLicenseContextSerializer.cs
- CompositeCollectionView.cs
- HTMLTextWriter.cs
- LockCookie.cs
- LineProperties.cs
- CheckBoxAutomationPeer.cs
- ResourceIDHelper.cs
- Point4DValueSerializer.cs
- SamlAuthorityBinding.cs
- Vector3DConverter.cs
- CodeFieldReferenceExpression.cs
- EntityDataSourceViewSchema.cs
- PtsCache.cs
- TableLayoutPanelDesigner.cs
- DeploymentSection.cs
- XmlDataSource.cs
- TextFormatterImp.cs
- BitmapDecoder.cs
- GC.cs
- XmlBinaryReaderSession.cs
- CodeDelegateInvokeExpression.cs