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
- TextDecorations.cs
- DoubleCollection.cs
- HttpRequest.cs
- FileChangesMonitor.cs
- BindingCollection.cs
- TableRowCollection.cs
- BitmapFrameEncode.cs
- uribuilder.cs
- FunctionQuery.cs
- ActivityDefaults.cs
- MSG.cs
- DataServiceQueryProvider.cs
- ColumnCollection.cs
- ContentPresenter.cs
- TrustLevelCollection.cs
- ToolStripSystemRenderer.cs
- TargetConverter.cs
- Polyline.cs
- ProxySimple.cs
- DictionaryTraceRecord.cs
- UdpChannelFactory.cs
- ComponentConverter.cs
- InvokeWebServiceDesigner.cs
- XmlNamespaceDeclarationsAttribute.cs
- MemberCollection.cs
- RestClientProxyHandler.cs
- Crypto.cs
- WebSysDisplayNameAttribute.cs
- StrongBox.cs
- NativeStructs.cs
- CfgParser.cs
- Monitor.cs
- NavigationService.cs
- PropertyEntry.cs
- FlowSwitchDesigner.xaml.cs
- BaseValidator.cs
- CustomSignedXml.cs
- EndpointConfigContainer.cs
- DateTimeUtil.cs
- SpotLight.cs
- WorkflowMarkupSerializationManager.cs
- SchemaNotation.cs
- FilteredXmlReader.cs
- HandlerMappingMemo.cs
- ToolTipAutomationPeer.cs
- SolidColorBrush.cs
- MailMessage.cs
- StringComparer.cs
- SqlBooleanizer.cs
- KeyGestureConverter.cs
- JavascriptCallbackMessageInspector.cs
- BevelBitmapEffect.cs
- ContractTypeNameElement.cs
- dbenumerator.cs
- WebPartCatalogAddVerb.cs
- ColorTransform.cs
- StyleModeStack.cs
- WindowsToolbarAsMenu.cs
- DataPointer.cs
- _CookieModule.cs
- StdValidatorsAndConverters.cs
- InputScope.cs
- FixUpCollection.cs
- MulticastOption.cs
- HtmlInputSubmit.cs
- UIElementPropertyUndoUnit.cs
- EditorPartDesigner.cs
- InvalidPropValue.cs
- MonthCalendar.cs
- GlobalProxySelection.cs
- CallSite.cs
- _CommandStream.cs
- XamlWrappingReader.cs
- RegexGroupCollection.cs
- XmlAutoDetectWriter.cs
- XmlSortKey.cs
- NetDispatcherFaultException.cs
- UserControl.cs
- DesignerActionKeyboardBehavior.cs
- SiteMapSection.cs
- CollectionType.cs
- CreateUserErrorEventArgs.cs
- PageBreakRecord.cs
- Matrix3DValueSerializer.cs
- MetaChildrenColumn.cs
- BufferedGraphicsManager.cs
- SyndicationDeserializer.cs
- DataGridViewColumnDesigner.cs
- IdentityVerifier.cs
- ToolStripStatusLabel.cs
- ClockGroup.cs
- SQLChars.cs
- TreeWalker.cs
- WpfKnownTypeInvoker.cs
- ExternalFile.cs
- columnmapfactory.cs
- RegexCapture.cs
- __FastResourceComparer.cs
- OracleCommandSet.cs
- GenericIdentity.cs