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
- FixedSOMTableCell.cs
- SqlMethodAttribute.cs
- Compilation.cs
- XmlNodeReader.cs
- CodeTryCatchFinallyStatement.cs
- MethodSignatureGenerator.cs
- IApplicationTrustManager.cs
- DataGridViewRowHeaderCell.cs
- XmlnsDictionary.cs
- Or.cs
- DataObjectEventArgs.cs
- Camera.cs
- XPathDescendantIterator.cs
- LowerCaseStringConverter.cs
- SchemaCollectionPreprocessor.cs
- DoneReceivingAsyncResult.cs
- TextSelectionHelper.cs
- Debug.cs
- Grammar.cs
- ComplexBindingPropertiesAttribute.cs
- CompilerInfo.cs
- StylusPointPropertyUnit.cs
- ExternalCalls.cs
- UMPAttributes.cs
- XmlNodeList.cs
- XmlCharType.cs
- ZeroOpNode.cs
- DrawingDrawingContext.cs
- MemberDescriptor.cs
- CommandField.cs
- DbDataAdapter.cs
- SpeakProgressEventArgs.cs
- DoubleLink.cs
- EntityContainerEntitySet.cs
- CompensateDesigner.cs
- ColumnTypeConverter.cs
- EncoderParameter.cs
- DateTimeFormat.cs
- VectorKeyFrameCollection.cs
- SafeEventLogReadHandle.cs
- WebBaseEventKeyComparer.cs
- IndentedWriter.cs
- Vector3DConverter.cs
- BuildResult.cs
- HyperLinkStyle.cs
- QilPatternVisitor.cs
- GraphicsContainer.cs
- Config.cs
- RegistrySecurity.cs
- ContentOperations.cs
- TypeElementCollection.cs
- AttachmentService.cs
- ClassHandlersStore.cs
- DrawListViewSubItemEventArgs.cs
- QilBinary.cs
- WebMessageBodyStyleHelper.cs
- ElementInit.cs
- GridProviderWrapper.cs
- WebServiceFault.cs
- BindingManagerDataErrorEventArgs.cs
- GetTokenRequest.cs
- PreDigestedSignedInfo.cs
- PrintPreviewControl.cs
- WebPartVerbsEventArgs.cs
- ListViewGroup.cs
- Application.cs
- xmlsaver.cs
- KeyEventArgs.cs
- Propagator.ExtentPlaceholderCreator.cs
- SynchronizationContext.cs
- httpapplicationstate.cs
- ListBindingHelper.cs
- CachedPathData.cs
- ClientTarget.cs
- TypeUtil.cs
- ContractUtils.cs
- ExtractedStateEntry.cs
- User.cs
- AnnouncementSendsAsyncResult.cs
- RowSpanVector.cs
- OleDbErrorCollection.cs
- ExceptQueryOperator.cs
- DataAccessor.cs
- XmlNamespaceManager.cs
- WinEventQueueItem.cs
- Compiler.cs
- Conditional.cs
- ListViewSelectEventArgs.cs
- SQLByteStorage.cs
- DecryptedHeader.cs
- EntityCommandDefinition.cs
- SrgsRuleRef.cs
- SafeRsaProviderHandle.cs
- Transactions.cs
- CryptoStream.cs
- PageFunction.cs
- MailBnfHelper.cs
- LinqDataSourceView.cs
- RegexCapture.cs
- StorageConditionPropertyMapping.cs