Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Runtime / FuncCompletionCallbackWrapper.cs / 1305376 / FuncCompletionCallbackWrapper.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Runtime { using System; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization; using System.Runtime; using System.Security; [DataContract] class FuncCompletionCallbackWrapper: CompletionCallbackWrapper { static Type callbackType = typeof(CompletionCallback ); static Type[] callbackParameterTypes = new Type[] { typeof(NativeActivityContext), typeof(ActivityInstance),typeof(T) }; [DataMember(EmitDefaultValue = false)] T resultValue; public FuncCompletionCallbackWrapper(CompletionCallback callback, ActivityInstance owningInstance) : base(callback, owningInstance) { this.NeedsToGatherOutputs = true; } int GetResultId(ActivityWithResult activity) { if (activity.Result != null) { return activity.Result.Id; } else { for (int i = 0; i < activity.RuntimeArguments.Count; i++) { RuntimeArgument argument = activity.RuntimeArguments[i]; if (argument.IsResult) { return argument.Id; } } } return -1; } protected override void GatherOutputs(ActivityInstance completedInstance) { int resultId = -1; if (completedInstance.Activity.HandlerOf != null) { DelegateOutArgument resultArgument = completedInstance.Activity.HandlerOf.GetResultArgument(); if (resultArgument != null) { resultId = resultArgument.Id; } else { ActivityWithResult activity = completedInstance.Activity as ActivityWithResult; // for auto-generated results, we should bind the value from the Handler if available if (activity != null && TypeHelper.AreTypesCompatible(activity.ResultType, typeof(T))) { resultId = GetResultId(activity); } } } else { Fx.Assert(completedInstance.Activity is ActivityWithResult, "should only be using FuncCompletionCallbackWrapper with ActivityFunc and ActivityWithResult"); resultId = GetResultId((ActivityWithResult)completedInstance.Activity); } if (resultId >= 0) { Location location = completedInstance.Environment.GetSpecificLocation(resultId); Location typedLocation = location as Location ; if (typedLocation != null) { this.resultValue = typedLocation.Value; } else if (location != null) { this.resultValue = TypeHelper.Convert (location.Value); } } } protected internal override void Invoke(NativeActivityContext context, ActivityInstance completedInstance) { // Call the EnsureCallback overload that also looks for SomeMethod where T is the result type // and the signature matches. EnsureCallback(callbackType, callbackParameterTypes, callbackParameterTypes[2]); CompletionCallback completionCallback = (CompletionCallback )this.Callback; completionCallback(context, completedInstance, this.resultValue); } protected override void OnSerializingGenericCallback() { ValidateCallbackResolution(callbackType, callbackParameterTypes, callbackParameterTypes[2]); } } } // 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
- DashStyles.cs
- ChtmlMobileTextWriter.cs
- PresentationUIStyleResources.cs
- HttpHandlersSection.cs
- RSACryptoServiceProvider.cs
- XmlReaderDelegator.cs
- Variant.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- WebPartCollection.cs
- OperandQuery.cs
- MsmqUri.cs
- WebResourceAttribute.cs
- EndpointAddress.cs
- HttpRequestTraceRecord.cs
- SQLCharsStorage.cs
- LocalValueEnumerator.cs
- Brush.cs
- validationstate.cs
- ModelItemImpl.cs
- Int64KeyFrameCollection.cs
- CollectionDataContractAttribute.cs
- Interop.cs
- connectionpool.cs
- XPathAncestorQuery.cs
- XmlDomTextWriter.cs
- MimeTypeMapper.cs
- CancellationHandler.cs
- InternalConfigHost.cs
- XmlSerializationGeneratedCode.cs
- OleDbPermission.cs
- ObjectDataSourceEventArgs.cs
- SspiHelper.cs
- GuidelineSet.cs
- LostFocusEventManager.cs
- RewritingProcessor.cs
- VisualStyleRenderer.cs
- StatusStrip.cs
- FileDialog_Vista.cs
- WpfXamlLoader.cs
- DPCustomTypeDescriptor.cs
- SQlBooleanStorage.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ModelItemCollection.cs
- ETagAttribute.cs
- WebPartRestoreVerb.cs
- RoutedEventConverter.cs
- ZoneButton.cs
- RangeBase.cs
- tooltip.cs
- SettingsPropertyNotFoundException.cs
- DBCSCodePageEncoding.cs
- SnapLine.cs
- TextChangedEventArgs.cs
- Query.cs
- DataSourceControlBuilder.cs
- TrackBarDesigner.cs
- ReferencedType.cs
- NativeObjectSecurity.cs
- XmlExceptionHelper.cs
- HttpClientCertificate.cs
- BitmapMetadata.cs
- HwndSource.cs
- EditorPartCollection.cs
- ToolZone.cs
- ApplicationDirectory.cs
- SelectedGridItemChangedEvent.cs
- QilUnary.cs
- QuaternionKeyFrameCollection.cs
- MenuItem.cs
- UserControl.cs
- TransformGroup.cs
- DataTablePropertyDescriptor.cs
- DoubleAnimationClockResource.cs
- CaseExpr.cs
- ClientFormsAuthenticationCredentials.cs
- BamlTreeUpdater.cs
- DataGridPageChangedEventArgs.cs
- Viewport3DAutomationPeer.cs
- Compress.cs
- WindowManager.cs
- CodeConditionStatement.cs
- EmptyReadOnlyDictionaryInternal.cs
- DeviceContexts.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- PackageRelationshipSelector.cs
- BypassElement.cs
- PtsHelper.cs
- RowToParametersTransformer.cs
- ConnectionPoint.cs
- TimeZone.cs
- HtmlObjectListAdapter.cs
- FormsAuthenticationModule.cs
- BinaryQueryOperator.cs
- UpdateTracker.cs
- TemplateManager.cs
- InheritedPropertyDescriptor.cs
- LicFileLicenseProvider.cs
- GorillaCodec.cs
- OuterGlowBitmapEffect.cs
- LineProperties.cs