Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / ForEach.cs / 1305376 / ForEach.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Statements { using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Runtime; using System.Runtime.Serialization; using System.Windows.Markup; using System.Activities; using System.Activities.Validation; [ContentProperty("Body")] public sealed class ForEach: NativeActivity { Variable > valueEnumerator; CompletionCallback onChildComplete; public ForEach() : base() { this.valueEnumerator = new Variable >(); } [DefaultValue(null)] public ActivityAction Body { get; set; } [RequiredArgument] [DefaultValue(null)] public InArgument > Values { get; set; } CompletionCallback OnChildComplete { get { if (this.onChildComplete == null) { this.onChildComplete = new CompletionCallback(GetStateAndExecute); } return this.onChildComplete; } } protected override void CacheMetadata(NativeActivityMetadata metadata) { RuntimeArgument valuesArgument = new RuntimeArgument("Values", typeof(IEnumerable ), ArgumentDirection.In, true); metadata.Bind(this.Values, valuesArgument); metadata.AddArgument(valuesArgument); metadata.AddDelegate(this.Body); metadata.AddImplementationVariable(this.valueEnumerator); } protected override void Execute(NativeActivityContext context) { IEnumerable values = this.Values.Get(context); if (values == null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.ForEachRequiresNonNullValues(this.DisplayName))); } IEnumerator valueEnumerator = values.GetEnumerator(); this.valueEnumerator.Set(context, valueEnumerator); if (this.Body == null || this.Body.Handler == null) { while (valueEnumerator.MoveNext()) { // do nothing }; valueEnumerator.Dispose(); return; } InternalExecute(context, null, valueEnumerator); } void GetStateAndExecute(NativeActivityContext context, ActivityInstance completedInstance) { IEnumerator valueEnumerator = this.valueEnumerator.Get(context); Fx.Assert(valueEnumerator != null, "GetStateAndExecute"); InternalExecute(context, completedInstance, valueEnumerator); } void InternalExecute(NativeActivityContext context, ActivityInstance completedInstance, IEnumerator valueEnumerator) { Fx.Assert(this.Body != null && this.Body.Handler != null, "Body and Body.Handler should not be null"); if (!valueEnumerator.MoveNext()) { if (completedInstance != null) { if (completedInstance.State == ActivityInstanceState.Canceled || (context.IsCancellationRequested && completedInstance.State == ActivityInstanceState.Faulted)) { context.MarkCanceled(); } } valueEnumerator.Dispose(); return; } // After making sure there is another value, let's check for cancelation if (context.IsCancellationRequested) { context.MarkCanceled(); valueEnumerator.Dispose(); return; } context.ScheduleAction(this.Body, valueEnumerator.Current, this.OnChildComplete); } } } // 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
- ToolTipService.cs
- RSAOAEPKeyExchangeFormatter.cs
- DbProviderSpecificTypePropertyAttribute.cs
- RadioButtonFlatAdapter.cs
- SystemNetworkInterface.cs
- NullNotAllowedCollection.cs
- TreeBuilder.cs
- ConfigurationElementProperty.cs
- UsernameTokenFactoryCredential.cs
- FormViewDeletedEventArgs.cs
- MatrixTransform3D.cs
- DecimalStorage.cs
- SelectiveScrollingGrid.cs
- sqlstateclientmanager.cs
- ReadOnlyCollection.cs
- BreadCrumbTextConverter.cs
- DataGridViewControlCollection.cs
- MLangCodePageEncoding.cs
- RegexReplacement.cs
- DateTimeEditor.cs
- MatchingStyle.cs
- EventLogPermission.cs
- CodeNamespace.cs
- ProbeMatches11.cs
- TreeNodeStyleCollection.cs
- DataGridCellInfo.cs
- HtmlForm.cs
- AuthenticationModuleElementCollection.cs
- ControlCollection.cs
- FacetValueContainer.cs
- AttributeUsageAttribute.cs
- PageAsyncTaskManager.cs
- StringDictionaryEditor.cs
- QueryInterceptorAttribute.cs
- XmlSchemaInferenceException.cs
- RequestTimeoutManager.cs
- EnumBuilder.cs
- NativeMethods.cs
- DataGridState.cs
- DbgUtil.cs
- PrePostDescendentsWalker.cs
- TemplateNameScope.cs
- Knowncolors.cs
- HtmlEmptyTagControlBuilder.cs
- EventLogConfiguration.cs
- DataBoundControlAdapter.cs
- WindowsListViewItemStartMenu.cs
- WindowsAuthenticationModule.cs
- Icon.cs
- GridViewDeletedEventArgs.cs
- MetadataItem_Static.cs
- X509Utils.cs
- ZipIOLocalFileBlock.cs
- RuleCache.cs
- ContentType.cs
- DocumentPage.cs
- NativeMethods.cs
- ProcessProtocolHandler.cs
- XamlDesignerSerializationManager.cs
- AttachmentCollection.cs
- ClientRolePrincipal.cs
- ToolStripContentPanelDesigner.cs
- SelectionPattern.cs
- StatusBarPanel.cs
- HMACSHA256.cs
- TreeIterators.cs
- PenThread.cs
- _Events.cs
- ProgressBarHighlightConverter.cs
- MD5.cs
- AtomMaterializer.cs
- RightsManagementEncryptionTransform.cs
- SQLStringStorage.cs
- EntityContainer.cs
- EventlogProvider.cs
- StreamWriter.cs
- FormatterServices.cs
- TypeUtils.cs
- XmlEncoding.cs
- ExpressionTextBox.xaml.cs
- XmlCharacterData.cs
- ListViewGroupItemCollection.cs
- FormViewModeEventArgs.cs
- PolygonHotSpot.cs
- ValidationEventArgs.cs
- BoolExpressionVisitors.cs
- PlanCompiler.cs
- _ProxyChain.cs
- FrameworkElementFactory.cs
- Matrix3D.cs
- LogicalExpr.cs
- BamlRecords.cs
- MetadataProperty.cs
- EdmRelationshipRoleAttribute.cs
- ByteKeyFrameCollection.cs
- MouseEvent.cs
- ExecutedRoutedEventArgs.cs
- EventRoute.cs
- AssemblyHash.cs
- Rect.cs