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
- EntityDataSourceContextCreatedEventArgs.cs
- StylusPointDescription.cs
- TiffBitmapDecoder.cs
- InkCanvasInnerCanvas.cs
- XamlTreeBuilderBamlRecordWriter.cs
- HScrollProperties.cs
- EmptyElement.cs
- SkewTransform.cs
- XmlToDatasetMap.cs
- SynchronizationValidator.cs
- SessionPageStatePersister.cs
- XamlHostingSectionGroup.cs
- RuleProcessor.cs
- DataBoundControlParameterTarget.cs
- TrackingConditionCollection.cs
- DbFunctionCommandTree.cs
- BaseAsyncResult.cs
- CustomAttribute.cs
- ActiveXHost.cs
- DataControlFieldCollection.cs
- Triplet.cs
- CreateUserErrorEventArgs.cs
- DrawingImage.cs
- Attributes.cs
- FormViewDeleteEventArgs.cs
- IDispatchConstantAttribute.cs
- TraceHandlerErrorFormatter.cs
- EventHandlerList.cs
- MessageQueueException.cs
- BaseWebProxyFinder.cs
- UseLicense.cs
- DataTableReader.cs
- XPathBinder.cs
- MeasureData.cs
- ManualResetEventSlim.cs
- DeclarativeCatalogPart.cs
- EventSinkActivityDesigner.cs
- DirectoryGroupQuery.cs
- ClientProxyGenerator.cs
- SafeBitVector32.cs
- SocketCache.cs
- ApplicationHost.cs
- SuppressMergeCheckAttribute.cs
- ConditionalBranch.cs
- AsyncOperation.cs
- WebPartDisplayModeCancelEventArgs.cs
- MobileControlsSection.cs
- MsmqTransportBindingElement.cs
- Context.cs
- WebMessageEncoderFactory.cs
- StringToken.cs
- CriticalHandle.cs
- TypeToken.cs
- EventData.cs
- OLEDB_Util.cs
- DataBoundLiteralControl.cs
- TransformerInfoCollection.cs
- ErrorView.xaml.cs
- XmlNavigatorFilter.cs
- _ListenerResponseStream.cs
- RotateTransform.cs
- BuildProvidersCompiler.cs
- ComboBoxAutomationPeer.cs
- SmtpMail.cs
- DetailsViewPagerRow.cs
- Material.cs
- ActivityXRefPropertyEditor.cs
- ProviderConnectionPoint.cs
- MarshalByValueComponent.cs
- ArrangedElement.cs
- ObjectPropertyMapping.cs
- WorkBatch.cs
- VersionedStream.cs
- SchemaImporterExtensionElementCollection.cs
- GridViewUpdateEventArgs.cs
- MobileUITypeEditor.cs
- BuiltInExpr.cs
- ToolStripProgressBar.cs
- FontNameConverter.cs
- ContextMenuStrip.cs
- InputMethod.cs
- HtmlHistory.cs
- StaticSiteMapProvider.cs
- AssemblyFilter.cs
- ManipulationStartedEventArgs.cs
- MouseBinding.cs
- StrokeNodeOperations2.cs
- DurableMessageDispatchInspector.cs
- PowerModeChangedEventArgs.cs
- UrlAuthorizationModule.cs
- ObsoleteAttribute.cs
- SurrogateChar.cs
- RoutedEventValueSerializer.cs
- WebResponse.cs
- SystemIPGlobalProperties.cs
- SymbolPair.cs
- MenuAutoFormat.cs
- TraceEventCache.cs
- DesignerVerbCollection.cs
- LineBreak.cs