Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / CancellationScope.cs / 1305376 / CancellationScope.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Statements { using System; using System.Activities; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.Collections; using System.Windows.Markup; [ContentProperty("Body")] public sealed class CancellationScope : NativeActivity { Collectionvariables; Variable suppressCancel; public CancellationScope() : base() { this.suppressCancel = new Variable (); } public Collection Variables { get { if (this.variables == null) { this.variables = new ValidatingCollection { // disallow null values OnAddValidationCallback = item => { if (item == null) { throw FxTrace.Exception.ArgumentNull("item"); } } }; } return this.variables; } } [DefaultValue(null)] [DependsOn("Variables")] public Activity Body { get; set; } [DefaultValue(null)] [DependsOn("Body")] public Activity CancellationHandler { get; set; } protected override void CacheMetadata(NativeActivityMetadata metadata) { metadata.AddChild(this.Body); metadata.AddChild(this.CancellationHandler); metadata.SetVariablesCollection(this.Variables); metadata.AddImplementationVariable(this.suppressCancel); } protected override void Execute(NativeActivityContext context) { if (this.Body != null) { context.ScheduleActivity(this.Body, new CompletionCallback(OnBodyComplete)); } } void OnBodyComplete(NativeActivityContext context, ActivityInstance completedInstance) { // Determine whether to run the Cancel based on whether the body // canceled rather than whether cancel had been requested. if (completedInstance.State == ActivityInstanceState.Canceled || (context.IsCancellationRequested && completedInstance.State == ActivityInstanceState.Faulted)) { // We don't cancel the cancel handler this.suppressCancel.Set(context, true); context.MarkCanceled(); if (this.CancellationHandler != null) { context.ScheduleActivity(this.CancellationHandler, onFaulted : new FaultCallback(OnExceptionFromCancelHandler)); } } } protected override void Cancel(NativeActivityContext context) { bool suppressCancel = this.suppressCancel.Get(context); if (!suppressCancel) { context.CancelChildren(); } } void OnExceptionFromCancelHandler(NativeActivityFaultContext context, Exception propagatedException, ActivityInstance propagatedFrom) { this.suppressCancel.Set(context, false); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StreamWriter.cs
- CallbackHandler.cs
- LoopExpression.cs
- VirtualDirectoryMappingCollection.cs
- ObjectListShowCommandsEventArgs.cs
- FixedBufferAttribute.cs
- Binding.cs
- InkPresenter.cs
- WebServiceHostFactory.cs
- SqlDependencyUtils.cs
- TimeoutTimer.cs
- RemotingAttributes.cs
- TextProviderWrapper.cs
- CodeAttributeArgument.cs
- SqlBuffer.cs
- ProxyManager.cs
- ItemDragEvent.cs
- CfgParser.cs
- DocumentOrderQuery.cs
- UInt64Storage.cs
- AddInBase.cs
- Int64Storage.cs
- CodeGenerator.cs
- TableItemPattern.cs
- EndpointDiscoveryMetadata.cs
- ReadOnlyPropertyMetadata.cs
- ZoneButton.cs
- OAVariantLib.cs
- EncoderNLS.cs
- DataGridRelationshipRow.cs
- HttpException.cs
- JsonByteArrayDataContract.cs
- XmlNodeList.cs
- EmptyStringExpandableObjectConverter.cs
- BooleanToVisibilityConverter.cs
- TextEditorSpelling.cs
- GenericTypeParameterBuilder.cs
- NullableFloatAverageAggregationOperator.cs
- GestureRecognitionResult.cs
- FastEncoder.cs
- SystemSounds.cs
- WCFServiceClientProxyGenerator.cs
- PermissionSetEnumerator.cs
- Avt.cs
- PenThreadWorker.cs
- SqlCharStream.cs
- BoundColumn.cs
- XmlSchemaAttribute.cs
- WriteTimeStream.cs
- WizardDesigner.cs
- SizeAnimationClockResource.cs
- MarkupObject.cs
- EventLogger.cs
- VariableQuery.cs
- EpmTargetPathSegment.cs
- QilDataSource.cs
- Simplifier.cs
- XmlSignatureManifest.cs
- CharUnicodeInfo.cs
- ConfigsHelper.cs
- MemoryFailPoint.cs
- QEncodedStream.cs
- NumberFormatter.cs
- TcpPortSharing.cs
- NetworkAddressChange.cs
- DbMetaDataColumnNames.cs
- WebRequestModuleElementCollection.cs
- InfoCardUIAgent.cs
- StackOverflowException.cs
- CompilationRelaxations.cs
- CodeIterationStatement.cs
- TraceUtility.cs
- AutoGeneratedField.cs
- StickyNoteContentControl.cs
- HostingEnvironment.cs
- NetworkInformationPermission.cs
- SafeWaitHandle.cs
- AudioFormatConverter.cs
- ExecutionProperties.cs
- GroupBox.cs
- PipelineModuleStepContainer.cs
- MessageBodyDescription.cs
- DeclaredTypeValidatorAttribute.cs
- columnmapfactory.cs
- JobInputBins.cs
- ItemContainerGenerator.cs
- HttpVersion.cs
- WebSysDefaultValueAttribute.cs
- ObjectDataSourceMethodEditor.cs
- StorageConditionPropertyMapping.cs
- EntityDataSourceChangingEventArgs.cs
- SecureUICommand.cs
- OutputCacheProfile.cs
- WebPartDescription.cs
- GuidelineSet.cs
- PropertyPathWorker.cs
- AttachedPropertiesService.cs
- StreamAsIStream.cs
- BitmapCache.cs
- SqlRecordBuffer.cs