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
- GZipStream.cs
- ParameterExpression.cs
- SlipBehavior.cs
- TransformerTypeCollection.cs
- XmlNodeChangedEventArgs.cs
- LogPolicy.cs
- DefaultSerializationProviderAttribute.cs
- ObjectListShowCommandsEventArgs.cs
- ConnectionOrientedTransportManager.cs
- TraceHandler.cs
- KeyboardEventArgs.cs
- ClientRoleProvider.cs
- XamlToRtfParser.cs
- Cursor.cs
- XmlDomTextWriter.cs
- PolicyStatement.cs
- LicenseContext.cs
- TransactedBatchContext.cs
- QuadraticBezierSegment.cs
- nulltextnavigator.cs
- SignedXmlDebugLog.cs
- UrlMappingCollection.cs
- MetroSerializationManager.cs
- input.cs
- ProcessHostFactoryHelper.cs
- _PooledStream.cs
- HashRepartitionStream.cs
- ListSourceHelper.cs
- HGlobalSafeHandle.cs
- RequestResizeEvent.cs
- FixedSOMTableRow.cs
- DataServiceRequestException.cs
- SoapElementAttribute.cs
- CSharpCodeProvider.cs
- SevenBitStream.cs
- TypeDescriptor.cs
- KeyProperty.cs
- DataGridHelper.cs
- PlaceHolder.cs
- QuaternionValueSerializer.cs
- DataGridSortingEventArgs.cs
- translator.cs
- ResourceAssociationTypeEnd.cs
- HttpDictionary.cs
- ObjectListDesigner.cs
- SystemColorTracker.cs
- EntityClientCacheEntry.cs
- ValidatingPropertiesEventArgs.cs
- InstanceNotReadyException.cs
- DefaultTextStore.cs
- CodeCommentStatementCollection.cs
- TrackBarRenderer.cs
- SafeLibraryHandle.cs
- BlockUIContainer.cs
- SafeFileMappingHandle.cs
- XmlCharCheckingWriter.cs
- DESCryptoServiceProvider.cs
- HttpRequestCacheValidator.cs
- CalculatedColumn.cs
- TypeUtils.cs
- CopyOnWriteList.cs
- RuleInfoComparer.cs
- AddInPipelineAttributes.cs
- Constraint.cs
- TreeViewItem.cs
- ComPlusContractBehavior.cs
- SiteOfOriginContainer.cs
- QilPatternFactory.cs
- NamespaceList.cs
- ServiceContractViewControl.cs
- DataGridRelationshipRow.cs
- ETagAttribute.cs
- DefaultBindingPropertyAttribute.cs
- AsymmetricKeyExchangeFormatter.cs
- QuaternionRotation3D.cs
- MenuAdapter.cs
- WebPartDisplayMode.cs
- PackWebResponse.cs
- FormatterServices.cs
- ErrorHandler.cs
- SSmlParser.cs
- XmlLinkedNode.cs
- _NestedMultipleAsyncResult.cs
- EnterpriseServicesHelper.cs
- XmlSchemaImport.cs
- MetafileHeaderWmf.cs
- SiteIdentityPermission.cs
- JulianCalendar.cs
- XLinq.cs
- ChooseAction.cs
- XmlExceptionHelper.cs
- XmlNodeComparer.cs
- ResourceDescriptionAttribute.cs
- QueryContinueDragEventArgs.cs
- XmlRawWriterWrapper.cs
- DataBinder.cs
- HebrewNumber.cs
- RecommendedAsConfigurableAttribute.cs
- GeometryCollection.cs
- ReturnValue.cs