Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeometryDrawing.cs
- ManipulationDeltaEventArgs.cs
- DefaultMemberAttribute.cs
- NameNode.cs
- PolicyException.cs
- HostedTransportConfigurationBase.cs
- DictionaryCustomTypeDescriptor.cs
- ResourcePart.cs
- TextHidden.cs
- _AutoWebProxyScriptHelper.cs
- SoapAttributes.cs
- ApplicationSecurityInfo.cs
- OperationCanceledException.cs
- LayoutSettings.cs
- SourceItem.cs
- SpoolingTask.cs
- ClipboardData.cs
- ConnectionStringsSection.cs
- SecurityTokenTypes.cs
- OracleNumber.cs
- prefixendpointaddressmessagefilter.cs
- EntityDataSourceReferenceGroup.cs
- formatter.cs
- HwndKeyboardInputProvider.cs
- UserControl.cs
- UnionExpr.cs
- DeleteCardRequest.cs
- MenuAdapter.cs
- OdbcPermission.cs
- CorrelationTokenTypeConvertor.cs
- TextFormatterHost.cs
- CollectionEditorDialog.cs
- Trigger.cs
- RegularExpressionValidator.cs
- VirtualizingPanel.cs
- CodeMemberField.cs
- DocumentViewer.cs
- Vertex.cs
- DefaultWorkflowSchedulerService.cs
- CompoundFileDeflateTransform.cs
- ManualResetEvent.cs
- DBAsyncResult.cs
- RecognizerBase.cs
- SafeNativeMethods.cs
- Int64KeyFrameCollection.cs
- EventDescriptor.cs
- _NativeSSPI.cs
- SqlCacheDependencySection.cs
- Track.cs
- MessageContractMemberAttribute.cs
- SimpleHandlerBuildProvider.cs
- WhitespaceRuleLookup.cs
- WindowClosedEventArgs.cs
- GenerateScriptTypeAttribute.cs
- ToolStripControlHost.cs
- SessionParameter.cs
- EventLogger.cs
- EntityDataSourceContainerNameConverter.cs
- WSDualHttpSecurityMode.cs
- UnsafeNativeMethods.cs
- ExceptionList.cs
- MonthChangedEventArgs.cs
- SmiMetaDataProperty.cs
- LinearGradientBrush.cs
- SharedStatics.cs
- CodeTypeMemberCollection.cs
- DnsPermission.cs
- CodeStatement.cs
- TextBoxRenderer.cs
- MailSettingsSection.cs
- ButtonBaseAdapter.cs
- EventLogger.cs
- SecurityValidationBehavior.cs
- DotAtomReader.cs
- WasHostedComPlusFactory.cs
- FieldToken.cs
- ByteKeyFrameCollection.cs
- LocalizationParserHooks.cs
- BatchWriter.cs
- CriticalExceptions.cs
- OleDbMetaDataFactory.cs
- Adorner.cs
- CodeExpressionCollection.cs
- ValueTypeFixupInfo.cs
- DateTimeOffsetStorage.cs
- baseaxisquery.cs
- ProjectionRewriter.cs
- PresentationSource.cs
- DockingAttribute.cs
- WebReference.cs
- BasicSecurityProfileVersion.cs
- ToolStripComboBox.cs
- BitmapEffectState.cs
- FrameworkContextData.cs
- ChangeProcessor.cs
- SecurityDescriptor.cs
- ValuePatternIdentifiers.cs
- QueryCacheKey.cs
- Pointer.cs
- DBConcurrencyException.cs