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
- ExpressionEditorSheet.cs
- IncrementalReadDecoders.cs
- InstanceHandleReference.cs
- NullRuntimeConfig.cs
- IntPtr.cs
- DateTimeParse.cs
- CharEnumerator.cs
- RichTextBoxAutomationPeer.cs
- NameValueFileSectionHandler.cs
- Parser.cs
- MessageHeaders.cs
- BuildProvidersCompiler.cs
- SystemColorTracker.cs
- elementinformation.cs
- XmlConvert.cs
- Menu.cs
- Visual.cs
- NewItemsContextMenuStrip.cs
- InvokeHandlers.cs
- HtmlWindowCollection.cs
- IProvider.cs
- SqlFunctionAttribute.cs
- SByteStorage.cs
- FixedSOMLineRanges.cs
- BamlBinaryReader.cs
- PolicyValidationException.cs
- TableNameAttribute.cs
- Coordinator.cs
- SvcFileManager.cs
- SvcMapFileSerializer.cs
- StringWriter.cs
- BitmapCacheBrush.cs
- _OSSOCK.cs
- FullTextBreakpoint.cs
- SqlCacheDependencySection.cs
- UrlPath.cs
- RotateTransform.cs
- VBIdentifierTrimConverter.cs
- SurrogateChar.cs
- mda.cs
- PageThemeBuildProvider.cs
- XmlQueryStaticData.cs
- PartBasedPackageProperties.cs
- SHA384Managed.cs
- ZoneIdentityPermission.cs
- OverrideMode.cs
- ToolStripSeparator.cs
- sqlpipe.cs
- Utility.cs
- ImageListUtils.cs
- AssemblyName.cs
- DataConnectionHelper.cs
- XmlDataSource.cs
- MeasureItemEvent.cs
- IPGlobalProperties.cs
- FormsAuthenticationUserCollection.cs
- StrongTypingException.cs
- SinglePageViewer.cs
- ICspAsymmetricAlgorithm.cs
- ReadOnlyDataSource.cs
- PipelineComponent.cs
- OpenTypeLayout.cs
- OrderByBuilder.cs
- columnmapfactory.cs
- Expander.cs
- BitmapEffect.cs
- Opcode.cs
- SpecialNameAttribute.cs
- Stacktrace.cs
- OperatingSystem.cs
- OleDbDataAdapter.cs
- BrowserCapabilitiesFactory.cs
- Baml2006ReaderSettings.cs
- DefaultParameterValueAttribute.cs
- MimeMapping.cs
- TemplateBindingExtensionConverter.cs
- LoginView.cs
- PeerSecurityManager.cs
- PrinterSettings.cs
- BinaryFormatter.cs
- WebContentFormatHelper.cs
- ErrorFormatter.cs
- SoapElementAttribute.cs
- SubstitutionList.cs
- ParameterBuilder.cs
- DependsOnAttribute.cs
- UIElementIsland.cs
- UInt16.cs
- ResourceExpressionEditor.cs
- SystemGatewayIPAddressInformation.cs
- TextDpi.cs
- ToolBarButtonDesigner.cs
- MergePropertyDescriptor.cs
- SourceLocation.cs
- ResourceReferenceExpressionConverter.cs
- CredentialCache.cs
- DataGridTextBox.cs
- BinaryFormatterWriter.cs
- MenuItemBinding.cs
- FixedLineResult.cs