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
- RewritingSimplifier.cs
- basemetadatamappingvisitor.cs
- ToolStripDropDownMenu.cs
- XamlBrushSerializer.cs
- DataSet.cs
- Vector3DAnimationUsingKeyFrames.cs
- DataServiceQueryProvider.cs
- ConversionValidationRule.cs
- Drawing.cs
- FieldInfo.cs
- PrintDialog.cs
- DynamicMetaObject.cs
- GetImportFileNameRequest.cs
- Ray3DHitTestResult.cs
- GridViewHeaderRowPresenter.cs
- DataGridViewRowPostPaintEventArgs.cs
- DBSchemaTable.cs
- DataGridColumnCollection.cs
- SchemaCollectionPreprocessor.cs
- CacheOutputQuery.cs
- SecurityHelper.cs
- AssemblyCache.cs
- FunctionImportMapping.cs
- DataGridViewTextBoxColumn.cs
- Queue.cs
- EnumBuilder.cs
- TextBox.cs
- HyperLink.cs
- EntryPointNotFoundException.cs
- ProbeDuplex11AsyncResult.cs
- Itemizer.cs
- DriveNotFoundException.cs
- TypeValidationEventArgs.cs
- DrawingAttributes.cs
- XmlDictionaryString.cs
- PropertiesTab.cs
- PolygonHotSpot.cs
- CellRelation.cs
- ListManagerBindingsCollection.cs
- ServiceBuildProvider.cs
- CacheManager.cs
- LogSwitch.cs
- Stack.cs
- EntityDataSourceChangingEventArgs.cs
- DataGridViewSelectedRowCollection.cs
- WebPartHelpVerb.cs
- CompilationRelaxations.cs
- AsymmetricKeyExchangeFormatter.cs
- HttpApplicationFactory.cs
- PaintValueEventArgs.cs
- DataViewSetting.cs
- ButtonStandardAdapter.cs
- SafeNativeMethods.cs
- DocumentViewerBase.cs
- XmlConverter.cs
- TileBrush.cs
- CmsInterop.cs
- NamedPermissionSet.cs
- KeysConverter.cs
- TrackingMemoryStream.cs
- TraceHandler.cs
- ScriptResourceAttribute.cs
- XPathAncestorIterator.cs
- CallContext.cs
- SQLMembershipProvider.cs
- DecoratedNameAttribute.cs
- Int64KeyFrameCollection.cs
- NativeMethods.cs
- SessionEndingCancelEventArgs.cs
- SafeFileHandle.cs
- NativeMethods.cs
- MembershipPasswordException.cs
- StreamAsIStream.cs
- XPathArrayIterator.cs
- ReadContentAsBinaryHelper.cs
- HttpCacheParams.cs
- RC2CryptoServiceProvider.cs
- PasswordRecovery.cs
- HttpFileCollectionBase.cs
- ClientBuildManagerCallback.cs
- WebPartZoneBase.cs
- WsatEtwTraceListener.cs
- MissingFieldException.cs
- ProfileManager.cs
- ToolStripScrollButton.cs
- CursorConverter.cs
- SqlErrorCollection.cs
- AssemblySettingAttributes.cs
- Compilation.cs
- DesignTimeParseData.cs
- SingleSelectRootGridEntry.cs
- StrokeNodeOperations2.cs
- ResourceExpressionEditor.cs
- HitTestParameters3D.cs
- OpacityConverter.cs
- DtdParser.cs
- MgmtConfigurationRecord.cs
- StringHandle.cs
- DescendentsWalker.cs
- BitArray.cs