Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Remoting / ObjectHandle.cs / 1305376 / ObjectHandle.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: ObjectHandle ** ** ** ObjectHandle wraps object references. A Handle allows a ** marshal by value object to be returned through an ** indirection allowing the caller to control when the ** object is loaded into their domain. ** ** ===========================================================*/ namespace System.Runtime.Remoting{ using System; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Runtime.Remoting; #if FEATURE_REMOTING using System.Runtime.Remoting.Activation; using System.Runtime.Remoting.Lifetime; #endif // We duplicate this type because we need to inherit from MarshalByRefObject iff FEATURE_REMOTING is // defined. It would be nice in the future to just wrap the class definition in an ifdef but right // now this causes problems with Thinner and causes it to generate invalid source. #if FEATURE_REMOTING [ClassInterface(ClassInterfaceType.AutoDual)] [System.Runtime.InteropServices.ComVisible(true)] public class ObjectHandle: MarshalByRefObject, IObjectHandle { private Object WrappedObject; private ObjectHandle() { } public ObjectHandle(Object o) { WrappedObject = o; } public Object Unwrap() { return WrappedObject; } // ObjectHandle has a finite lifetime. For now the default // lifetime is being used, this can be changed in this method to // specify a custom lifetime. #if FEATURE_REMOTING [System.Security.SecurityCritical] // auto-generated_required public override Object InitializeLifetimeService() { BCLDebug.Trace("REMOTE", "ObjectHandle.InitializeLifetimeService"); // // If the wrapped object has implemented InitializeLifetimeService to return null, // we don't want to go to the base class (which will result in a lease being // requested from the MarshalByRefObject, which starts up the LeaseManager, // which starts up the ThreadPool, adding three threads to the process. // We check if the wrapped object is a MarshalByRef object, and call InitializeLifetimeServices on it // and if it returns null, we return null. Otherwise we fall back to the old behavior. // MarshalByRefObject mbr = WrappedObject as MarshalByRefObject; if (mbr != null) { Object o = mbr.InitializeLifetimeService(); if (o == null) return null; } ILease lease = (ILease)base.InitializeLifetimeService(); return lease; } #endif // FEATURE_REMOTING } #else // !FEATURE_REMOTING [ClassInterface(ClassInterfaceType.AutoDual)] [System.Runtime.InteropServices.ComVisible(true)] public class ObjectHandle : IObjectHandle { private Object WrappedObject; private ObjectHandle() { } public ObjectHandle(Object o) { WrappedObject = o; } public Object Unwrap() { return WrappedObject; } #if FEATURE_REMOTING [System.Security.SecurityCritical] // auto-generated_required public override Object InitializeLifetimeService() { BCLDebug.Trace("REMOTE", "ObjectHandle.InitializeLifetimeService"); // // If the wrapped object has implemented InitializeLifetimeService to return null, // we don't want to go to the base class (which will result in a lease being // requested from the MarshalByRefObject, which starts up the LeaseManager, // which starts up the ThreadPool, adding three threads to the process. // We check if the wrapped object is a MarshalByRef object, and call InitializeLifetimeServices on it // and if it returns null, we return null. Otherwise we fall back to the old behavior. // MarshalByRefObject mbr = WrappedObject as MarshalByRefObject; if (mbr != null) { Object o = mbr.InitializeLifetimeService(); if (o == null) return null; } ILease lease = (ILease)base.InitializeLifetimeService(); return lease; } #endif // FEATURE_REMOTING } #endif // !FEATURE_REMOTING } // 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
- CutCopyPasteHelper.cs
- LinqDataSourceUpdateEventArgs.cs
- Renderer.cs
- ScalarConstant.cs
- CodeBlockBuilder.cs
- DBParameter.cs
- MinMaxParagraphWidth.cs
- ExecutionScope.cs
- WebBrowserContainer.cs
- VirtualizedItemPattern.cs
- WebAdminConfigurationHelper.cs
- WebPartZoneAutoFormat.cs
- SafeEventLogWriteHandle.cs
- GroupItem.cs
- DetailsViewCommandEventArgs.cs
- SystemKeyConverter.cs
- DbBuffer.cs
- CustomError.cs
- WindowsTitleBar.cs
- WebResponse.cs
- SqlDataSourceParameterParser.cs
- CookieProtection.cs
- RootContext.cs
- BuildDependencySet.cs
- Operand.cs
- FontUnitConverter.cs
- CheckBoxField.cs
- FlowDocumentView.cs
- HasCopySemanticsAttribute.cs
- CLSCompliantAttribute.cs
- IpcPort.cs
- SapiInterop.cs
- WizardPanel.cs
- FilterUserControlBase.cs
- HTTP_SERVICE_CONFIG_URLACL_PARAM.cs
- AuthenticationConfig.cs
- Application.cs
- WindowsPrincipal.cs
- XmlSchemaSet.cs
- MappingSource.cs
- ContentType.cs
- QilIterator.cs
- VisualStyleInformation.cs
- TextBoxRenderer.cs
- XmlDataLoader.cs
- EventLogPermissionEntry.cs
- BitmapEffectDrawingContent.cs
- TextSegment.cs
- StatusBarDesigner.cs
- SerializationBinder.cs
- CachedFontFamily.cs
- CriticalHandle.cs
- UIAgentInitializationException.cs
- TemplateBindingExpressionConverter.cs
- ContentElement.cs
- BounceEase.cs
- PresentationSource.cs
- LocatorPartList.cs
- FrameworkObject.cs
- HttpGetClientProtocol.cs
- MemberPathMap.cs
- HotSpot.cs
- ApplicationException.cs
- BufferModeSettings.cs
- ClonableStack.cs
- ChtmlPhoneCallAdapter.cs
- BulletChrome.cs
- FloatSumAggregationOperator.cs
- EntityDataSourceChangingEventArgs.cs
- PreviewControlDesigner.cs
- SQLSingle.cs
- SynchronizedMessageSource.cs
- EmissiveMaterial.cs
- _SingleItemRequestCache.cs
- PromptBuilder.cs
- PathFigure.cs
- QilFunction.cs
- SiblingIterators.cs
- DataGridViewCellStyleConverter.cs
- NamedPipeTransportBindingElement.cs
- SQLResource.cs
- FreezableCollection.cs
- HMACSHA384.cs
- ProxyWebPartManager.cs
- StorageBasedPackageProperties.cs
- FileDialog_Vista_Interop.cs
- TraceContext.cs
- ListView.cs
- BrowserCapabilitiesCodeGenerator.cs
- ResourceKey.cs
- DoubleLink.cs
- SoapClientProtocol.cs
- UnionCqlBlock.cs
- SecurityBindingElement.cs
- LogReserveAndAppendState.cs
- SerialPinChanges.cs
- ThreadAbortException.cs
- EntityDataSourceSelectedEventArgs.cs
- initElementDictionary.cs
- XmlSequenceWriter.cs