Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / Parallel.cs / 1305376 / Parallel.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Statements { using System.Activities; using System.Activities.Validation; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows.Markup; using System.Runtime.Collections; [ContentProperty("Branches")] public sealed class Parallel : NativeActivity { CompletionCallbackonConditionComplete; Collection branches; Collection variables; Variable hasCompleted; public Parallel() : base() { } 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 CompletionCondition { get; set; } [DependsOn("CompletionCondition")] public Collection Branches { get { if (this.branches == null) { this.branches = new ValidatingCollection { // disallow null values OnAddValidationCallback = item => { if (item == null) { throw FxTrace.Exception.ArgumentNull("item"); } } }; } return this.branches; } } protected override void CacheMetadata(NativeActivityMetadata metadata) { Collection children = new Collection (); foreach (Activity branch in this.Branches) { children.Add(branch); } if (this.CompletionCondition != null) { children.Add(this.CompletionCondition); } metadata.SetChildrenCollection(children); metadata.SetVariablesCollection(this.Variables); if (this.CompletionCondition != null) { if (this.hasCompleted == null) { this.hasCompleted = new Variable (); } metadata.AddImplementationVariable(this.hasCompleted); } } protected override void Execute(NativeActivityContext context) { if (this.branches != null && this.Branches.Count != 0) { CompletionCallback onBranchComplete = new CompletionCallback(OnBranchComplete); for (int i = this.Branches.Count - 1; i >= 0; i--) { context.ScheduleActivity(this.Branches[i], onBranchComplete); } } } protected override void Cancel(NativeActivityContext context) { // If we don't have a completion condition then we can just // use default logic. if (this.CompletionCondition == null) { base.Cancel(context); } else { context.CancelChildren(); } } void OnBranchComplete(NativeActivityContext context, ActivityInstance completedInstance) { if (this.CompletionCondition != null && !this.hasCompleted.Get(context)) { // If we haven't completed, we've been requested to cancel, and we've had a child // end in a non-Closed state then we should cancel ourselves. if (completedInstance.State != ActivityInstanceState.Closed && context.IsCancellationRequested) { context.MarkCanceled(); this.hasCompleted.Set(context, true); return; } if (this.onConditionComplete == null) { this.onConditionComplete = new CompletionCallback (OnConditionComplete); } context.ScheduleActivity(this.CompletionCondition, this.onConditionComplete); } } void OnConditionComplete(NativeActivityContext context, ActivityInstance completedInstance, bool result) { if (result) { context.CancelChildren(); this.hasCompleted.Set(context, true); } } } } // 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
- Geometry.cs
- Nodes.cs
- InitializerFacet.cs
- Translator.cs
- GetPageCompletedEventArgs.cs
- StatementContext.cs
- SelectionUIHandler.cs
- IDReferencePropertyAttribute.cs
- RestHandler.cs
- StorageScalarPropertyMapping.cs
- SiteMembershipCondition.cs
- FontClient.cs
- ResolveDuplexCD1AsyncResult.cs
- DataGridRowAutomationPeer.cs
- ScriptReference.cs
- RegexInterpreter.cs
- InvalidComObjectException.cs
- ExceptionValidationRule.cs
- CodeArrayCreateExpression.cs
- DataObjectMethodAttribute.cs
- TextParagraphProperties.cs
- Vector3DCollectionConverter.cs
- RegexWorker.cs
- ValidationContext.cs
- SecurityManager.cs
- Lease.cs
- DropShadowEffect.cs
- ListBindingConverter.cs
- RemotingException.cs
- XmlReturnWriter.cs
- CallbackValidatorAttribute.cs
- Selection.cs
- EntityDataSource.cs
- HttpCapabilitiesBase.cs
- TypeUtil.cs
- ListBoxItem.cs
- CompilerInfo.cs
- ContainerUIElement3D.cs
- EventLogPropertySelector.cs
- StrokeCollectionConverter.cs
- ScriptControlDescriptor.cs
- ListenerConfig.cs
- FilterElement.cs
- CodeConditionStatement.cs
- Int16Storage.cs
- LinqDataSourceHelper.cs
- CompressedStack.cs
- BinaryCommonClasses.cs
- RedirectionProxy.cs
- Keywords.cs
- SHA384Managed.cs
- QuaternionConverter.cs
- Span.cs
- SoapConverter.cs
- OperationPickerDialog.designer.cs
- FacetEnabledSchemaElement.cs
- DateTimeValueSerializerContext.cs
- Blend.cs
- NavigationExpr.cs
- ProcessThread.cs
- CellNormalizer.cs
- BaseTemplateParser.cs
- WebPartPersonalization.cs
- ArgumentDesigner.xaml.cs
- __Error.cs
- CacheDependency.cs
- Compiler.cs
- BinHexEncoder.cs
- StrokeNodeData.cs
- Rule.cs
- BitmapCacheBrush.cs
- MdImport.cs
- WindowCollection.cs
- SQLBytes.cs
- CompilationLock.cs
- SystemWebSectionGroup.cs
- RawStylusInputCustomData.cs
- CellQuery.cs
- SoapObjectInfo.cs
- CompilationLock.cs
- HttpPostProtocolReflector.cs
- SharedPersonalizationStateInfo.cs
- XmlSchemaException.cs
- TimeSpanValidatorAttribute.cs
- StreamGeometry.cs
- SafeRightsManagementSessionHandle.cs
- HttpListener.cs
- CssTextWriter.cs
- OdbcUtils.cs
- CmsUtils.cs
- ResponseStream.cs
- MarginCollapsingState.cs
- ResourceProperty.cs
- PageCache.cs
- PointHitTestResult.cs
- RunWorkerCompletedEventArgs.cs
- SQLInt32Storage.cs
- Point4DValueSerializer.cs
- StaticResourceExtension.cs
- CursorConverter.cs