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
- ProgressBar.cs
- ExclusiveTcpTransportManager.cs
- AuthenticationConfig.cs
- Message.cs
- TemplateXamlParser.cs
- CodeIterationStatement.cs
- PermissionToken.cs
- DemultiplexingClientMessageFormatter.cs
- SQlBooleanStorage.cs
- ValidatedControlConverter.cs
- StrokeCollection2.cs
- ExcCanonicalXml.cs
- DocumentViewerBase.cs
- EventData.cs
- ToolBarOverflowPanel.cs
- GridViewUpdateEventArgs.cs
- ActiveXSite.cs
- ExpressionWriter.cs
- TextSearch.cs
- OdbcConnectionPoolProviderInfo.cs
- DataGridViewTextBoxCell.cs
- PrintingPermissionAttribute.cs
- CodeCompileUnit.cs
- TextEditorTables.cs
- DecryptRequest.cs
- UnionQueryOperator.cs
- SplitterEvent.cs
- Storyboard.cs
- NativeMethods.cs
- TabItem.cs
- EndEvent.cs
- SystemTcpStatistics.cs
- ValidationEventArgs.cs
- FixUpCollection.cs
- MetadataItemEmitter.cs
- AttachmentService.cs
- ToolStripDropDownMenu.cs
- xamlnodes.cs
- Matrix.cs
- CustomErrorCollection.cs
- DescendantQuery.cs
- FlowLayoutPanelDesigner.cs
- DataServiceClientException.cs
- RemotingHelper.cs
- ChtmlTextWriter.cs
- SchemeSettingElementCollection.cs
- RowUpdatingEventArgs.cs
- RepeaterItemCollection.cs
- SqlClientFactory.cs
- HttpHandlersSection.cs
- Int32CollectionConverter.cs
- prefixendpointaddressmessagefiltertable.cs
- QueryAsyncResult.cs
- GlobalizationSection.cs
- ImageFormat.cs
- HandlerWithFactory.cs
- TimeZoneInfo.cs
- SourceFileInfo.cs
- HandleCollector.cs
- SqlDataSourceQueryConverter.cs
- OLEDB_Util.cs
- BasicHttpBindingElement.cs
- TraceInternal.cs
- XMLDiffLoader.cs
- CodeTypeReference.cs
- SID.cs
- XmlSchemaAttribute.cs
- XDRSchema.cs
- LookupNode.cs
- FaultPropagationQuery.cs
- SystemResourceHost.cs
- ActivationArguments.cs
- DetailsViewInsertedEventArgs.cs
- Avt.cs
- Duration.cs
- BindingElementCollection.cs
- MatrixAnimationUsingPath.cs
- StringFormat.cs
- RemotingException.cs
- WindowsFont.cs
- NavigationService.cs
- TableProviderWrapper.cs
- Control.cs
- DataGridState.cs
- ColorInterpolationModeValidation.cs
- RegexNode.cs
- BinaryOperationBinder.cs
- EmbeddedMailObjectsCollection.cs
- WebHostScriptMappingsInstallComponent.cs
- EndpointDispatcher.cs
- EntityFunctions.cs
- AssertSection.cs
- SqlStream.cs
- AccessKeyManager.cs
- AnnotationResource.cs
- NetworkAddressChange.cs
- DBProviderConfigurationHandler.cs
- TypeBuilder.cs
- ValidationResult.cs
- TemplateBamlRecordReader.cs