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
- ThrowHelper.cs
- MouseButtonEventArgs.cs
- DataListGeneralPage.cs
- InputProcessorProfiles.cs
- XsdDuration.cs
- DesignOnlyAttribute.cs
- NotifyInputEventArgs.cs
- SwitchAttribute.cs
- EventMap.cs
- MimeTypeAttribute.cs
- ASCIIEncoding.cs
- LambdaCompiler.Address.cs
- HtmlAnchor.cs
- TemplatedMailWebEventProvider.cs
- StateItem.cs
- WebPartEditorApplyVerb.cs
- XmlnsCache.cs
- Control.cs
- XmlDataProvider.cs
- DataGridTableCollection.cs
- DataSourceXmlSerializationAttribute.cs
- HtmlInputReset.cs
- RawStylusInputCustomData.cs
- ForceCopyBuildProvider.cs
- PerformanceCounterScope.cs
- TextEditorSpelling.cs
- ScriptComponentDescriptor.cs
- DiagnosticTraceRecords.cs
- NativeRightsManagementAPIsStructures.cs
- ReadOnlyCollectionBase.cs
- AllMembershipCondition.cs
- BitmapVisualManager.cs
- QueryStack.cs
- BasicCommandTreeVisitor.cs
- EdmConstants.cs
- BaseTypeViewSchema.cs
- StatusBarPanelClickEvent.cs
- ExpressionCopier.cs
- StartUpEventArgs.cs
- HyperLinkStyle.cs
- RegexReplacement.cs
- OleDbCommand.cs
- ReceiveActivityDesigner.cs
- GridViewCancelEditEventArgs.cs
- StrongNameIdentityPermission.cs
- RegionData.cs
- ConditionalExpression.cs
- IsolatedStorageFileStream.cs
- FormsAuthenticationCredentials.cs
- GradientStop.cs
- XmlIncludeAttribute.cs
- FileResponseElement.cs
- RegexStringValidator.cs
- TagNameToTypeMapper.cs
- ACL.cs
- MemberPathMap.cs
- DataGridViewSortCompareEventArgs.cs
- TextSerializer.cs
- NativeMethods.cs
- WindowsFormsHost.cs
- ValueUnavailableException.cs
- StaticDataManager.cs
- LabelDesigner.cs
- DragSelectionMessageFilter.cs
- util.cs
- StatusBarItem.cs
- EventDescriptor.cs
- DataGridTableCollection.cs
- Triplet.cs
- FormViewInsertedEventArgs.cs
- _SSPISessionCache.cs
- VisualStyleTypesAndProperties.cs
- AutomationProperties.cs
- XmlAttributeProperties.cs
- RuleSettings.cs
- SecurityManager.cs
- ProcessHostConfigUtils.cs
- DataGridViewSelectedRowCollection.cs
- _FixedSizeReader.cs
- ReflectPropertyDescriptor.cs
- SpotLight.cs
- UrlAuthFailedErrorFormatter.cs
- TimeSpanValidator.cs
- OutputCacheProfile.cs
- FileDialog_Vista.cs
- DataGrid.cs
- Int16Storage.cs
- PhysicalOps.cs
- MemberCollection.cs
- WebScriptMetadataInstanceContextProvider.cs
- ManipulationDeltaEventArgs.cs
- DataReaderContainer.cs
- processwaithandle.cs
- GreenMethods.cs
- ToolStripItemCollection.cs
- PixelFormat.cs
- CalculatedColumn.cs
- RelatedImageListAttribute.cs
- XmlDataSource.cs
- StylusOverProperty.cs