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
- MaterialGroup.cs
- Triangle.cs
- SelfIssuedAuthProofToken.cs
- Brush.cs
- LicenseContext.cs
- InstanceStoreQueryResult.cs
- ProcessModuleDesigner.cs
- ScrollItemPattern.cs
- ChildChangedEventArgs.cs
- Scheduling.cs
- Error.cs
- AttributeTableBuilder.cs
- SQLConvert.cs
- ConfigXmlText.cs
- GenericRootAutomationPeer.cs
- TextEncodedRawTextWriter.cs
- Latin1Encoding.cs
- PropertyEmitterBase.cs
- BackStopAuthenticationModule.cs
- ClientSettings.cs
- ProjectionPlanCompiler.cs
- ReadOnlyAttribute.cs
- HttpCapabilitiesEvaluator.cs
- EncodingInfo.cs
- XamlLoadErrorInfo.cs
- ExpressionWriter.cs
- WebSysDisplayNameAttribute.cs
- FailedToStartupUIException.cs
- ObjectNavigationPropertyMapping.cs
- MediaContextNotificationWindow.cs
- StatusBarDrawItemEvent.cs
- WebServiceFaultDesigner.cs
- LifetimeServices.cs
- ProcessInputEventArgs.cs
- StringConverter.cs
- ImageDrawing.cs
- Themes.cs
- AliasedExpr.cs
- BaseCodePageEncoding.cs
- Geometry.cs
- SystemIcmpV4Statistics.cs
- regiisutil.cs
- SelectionItemProviderWrapper.cs
- CrossContextChannel.cs
- EncodingDataItem.cs
- WindowsFormsLinkLabel.cs
- ResolveCompletedEventArgs.cs
- ListViewSortEventArgs.cs
- DetailsViewCommandEventArgs.cs
- ProviderMetadataCachedInformation.cs
- InfoCardRequestException.cs
- SchemaElement.cs
- TreeViewCancelEvent.cs
- SolidBrush.cs
- SdlChannelSink.cs
- MeasurementDCInfo.cs
- AppDomainFactory.cs
- BaseTemplateCodeDomTreeGenerator.cs
- RectKeyFrameCollection.cs
- HtmlContainerControl.cs
- Rules.cs
- DataTableClearEvent.cs
- RawStylusSystemGestureInputReport.cs
- SessionEndedEventArgs.cs
- FilterElement.cs
- ImageMetadata.cs
- EntityObject.cs
- ISAPIWorkerRequest.cs
- BeginStoryboard.cs
- WebPartActionVerb.cs
- PrtCap_Reader.cs
- FrameworkRichTextComposition.cs
- ToolboxItemSnapLineBehavior.cs
- TextSerializer.cs
- GZipDecoder.cs
- ContentTextAutomationPeer.cs
- pingexception.cs
- WindowsGraphicsWrapper.cs
- ReaderContextStackData.cs
- PathGeometry.cs
- SystemTcpStatistics.cs
- IndentedWriter.cs
- XamlReader.cs
- PeerFlooder.cs
- FillBehavior.cs
- ReadOnlyState.cs
- NumberAction.cs
- SimpleHandlerFactory.cs
- SecurityTokenTypes.cs
- SqlDataSourceQueryConverter.cs
- SqlCacheDependencyDatabaseCollection.cs
- ImageMap.cs
- ContainerAction.cs
- AppDomainUnloadedException.cs
- DataSetFieldSchema.cs
- SignatureDescription.cs
- OracleColumn.cs
- LocationSectionRecord.cs
- GuidTagList.cs
- DocumentPageTextView.cs