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
- RectValueSerializer.cs
- QuerySettings.cs
- MapPathBasedVirtualPathProvider.cs
- StrokeSerializer.cs
- DataGridViewTextBoxCell.cs
- BreakSafeBase.cs
- IItemContainerGenerator.cs
- XMLSyntaxException.cs
- ApplyTemplatesAction.cs
- Decimal.cs
- UIElement3DAutomationPeer.cs
- ProxyWebPartManagerDesigner.cs
- StylusPlugInCollection.cs
- SqlUserDefinedTypeAttribute.cs
- AttributeConverter.cs
- EntitySqlQueryCacheKey.cs
- XmlLoader.cs
- ForEachAction.cs
- ViewManager.cs
- GridToolTip.cs
- ButtonRenderer.cs
- DeferredElementTreeState.cs
- ImageAnimator.cs
- basecomparevalidator.cs
- PropertyNames.cs
- MoveSizeWinEventHandler.cs
- ConfigXmlComment.cs
- DataBoundControl.cs
- TextServicesHost.cs
- GridViewCommandEventArgs.cs
- Interlocked.cs
- EventProviderWriter.cs
- DiffuseMaterial.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- VideoDrawing.cs
- EndOfStreamException.cs
- CompModSwitches.cs
- DecimalConstantAttribute.cs
- SqlFlattener.cs
- FigureParaClient.cs
- TypeUsageBuilder.cs
- IntSumAggregationOperator.cs
- SqlCrossApplyToCrossJoin.cs
- ReaderContextStackData.cs
- MeasurementDCInfo.cs
- XsdValidatingReader.cs
- XmlAttributeHolder.cs
- SqlMethods.cs
- ExpiredSecurityTokenException.cs
- SourceSwitch.cs
- EdmMember.cs
- WindowsTokenRoleProvider.cs
- login.cs
- SafePEFileHandle.cs
- NullRuntimeConfig.cs
- ClientSponsor.cs
- ReflectionTypeLoadException.cs
- SessionPageStateSection.cs
- TemplateKeyConverter.cs
- ScheduleChanges.cs
- DataExpression.cs
- XamlStream.cs
- MenuEventArgs.cs
- GraphicsContainer.cs
- MailWriter.cs
- BitmapEffect.cs
- ViewCellRelation.cs
- TextServicesDisplayAttributePropertyRanges.cs
- WorkflowMarkupSerializationException.cs
- PointValueSerializer.cs
- LineVisual.cs
- TextElementAutomationPeer.cs
- ViewKeyConstraint.cs
- ResourceProperty.cs
- MouseWheelEventArgs.cs
- TemplateControlCodeDomTreeGenerator.cs
- RelationshipDetailsCollection.cs
- ContractUtils.cs
- StateMachineHelpers.cs
- CallId.cs
- Border.cs
- path.cs
- DeflateStream.cs
- ScrollViewerAutomationPeer.cs
- AccessDataSourceView.cs
- DelegateHelpers.Generated.cs
- Rotation3DAnimationBase.cs
- PenContexts.cs
- ButtonColumn.cs
- UIPropertyMetadata.cs
- SafeEventHandle.cs
- ProfileSettingsCollection.cs
- XmlSchemaImport.cs
- WebPartConnection.cs
- KnownAssemblyEntry.cs
- DefaultParameterValueAttribute.cs
- EventItfInfo.cs
- PreviewPrintController.cs
- SelectionItemPattern.cs
- FilePrompt.cs