Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Runtime / Remoting / AsyncResult.cs / 1 / AsyncResult.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Interface: AsyncResult ** ** Purpose: Object to encapsulate the results of an async ** operation ** ===========================================================*/ namespace System.Runtime.Remoting.Messaging { using System.Threading; using System.Runtime.Remoting; using System; using System.Security.Permissions; [System.Runtime.InteropServices.ComVisible(true)] public class AsyncResult : IAsyncResult, IMessageSink { internal AsyncResult(Message m) { m.GetAsyncBeginInfo(out _acbd, out _asyncState); _asyncDelegate = (Delegate) m.GetThisPtr(); } // True if the asynchronous operation has been completed. public virtual bool IsCompleted { get { return _isCompleted; } } // The delegate object on which the async call was invoked. public virtual Object AsyncDelegate { get { return _asyncDelegate; } } // The state object passed in via BeginInvoke. public virtual Object AsyncState { get { return _asyncState; } } public virtual bool CompletedSynchronously { get { return false; } } public bool EndInvokeCalled { get { return _endInvokeCalled; } set { BCLDebug.Assert(!_endInvokeCalled && value, "EndInvoke prevents multiple calls"); _endInvokeCalled = value; } } private void FaultInWaitHandle() { lock(this) { if (_AsyncWaitHandle == null) { _AsyncWaitHandle = new ManualResetEvent(_isCompleted); } } } public virtual WaitHandle AsyncWaitHandle { get { FaultInWaitHandle(); return _AsyncWaitHandle; } } public virtual void SetMessageCtrl(IMessageCtrl mc) { _mc = mc; } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] public virtual IMessage SyncProcessMessage(IMessage msg) { if (msg == null) { _replyMsg = new ReturnMessage(new RemotingException(Environment.GetResourceString("Remoting_NullMessage")), new ErrorMessage()); } else if (!(msg is IMethodReturnMessage)) { _replyMsg = new ReturnMessage(new RemotingException(Environment.GetResourceString("Remoting_Message_BadType")), new ErrorMessage()); } else { _replyMsg = msg; } lock (this) { _isCompleted = true; if (_AsyncWaitHandle != null) { _AsyncWaitHandle.Set(); } } if (_acbd != null) { // NOTE: We are invoking user code here! // Catch and Ignore exceptions thrown from async callback user code. _acbd(this); } return null; } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] public virtual IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { throw new NotSupportedException( Environment.GetResourceString("NotSupported_Method")); } public IMessageSink NextSink { [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] get { return null; } } public virtual IMessage GetReplyMessage() {return _replyMsg;} private IMessageCtrl _mc; private AsyncCallback _acbd; private IMessage _replyMsg; private bool _isCompleted; private bool _endInvokeCalled; private ManualResetEvent _AsyncWaitHandle; private Delegate _asyncDelegate; private Object _asyncState; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Interface: AsyncResult ** ** Purpose: Object to encapsulate the results of an async ** operation ** ===========================================================*/ namespace System.Runtime.Remoting.Messaging { using System.Threading; using System.Runtime.Remoting; using System; using System.Security.Permissions; [System.Runtime.InteropServices.ComVisible(true)] public class AsyncResult : IAsyncResult, IMessageSink { internal AsyncResult(Message m) { m.GetAsyncBeginInfo(out _acbd, out _asyncState); _asyncDelegate = (Delegate) m.GetThisPtr(); } // True if the asynchronous operation has been completed. public virtual bool IsCompleted { get { return _isCompleted; } } // The delegate object on which the async call was invoked. public virtual Object AsyncDelegate { get { return _asyncDelegate; } } // The state object passed in via BeginInvoke. public virtual Object AsyncState { get { return _asyncState; } } public virtual bool CompletedSynchronously { get { return false; } } public bool EndInvokeCalled { get { return _endInvokeCalled; } set { BCLDebug.Assert(!_endInvokeCalled && value, "EndInvoke prevents multiple calls"); _endInvokeCalled = value; } } private void FaultInWaitHandle() { lock(this) { if (_AsyncWaitHandle == null) { _AsyncWaitHandle = new ManualResetEvent(_isCompleted); } } } public virtual WaitHandle AsyncWaitHandle { get { FaultInWaitHandle(); return _AsyncWaitHandle; } } public virtual void SetMessageCtrl(IMessageCtrl mc) { _mc = mc; } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] public virtual IMessage SyncProcessMessage(IMessage msg) { if (msg == null) { _replyMsg = new ReturnMessage(new RemotingException(Environment.GetResourceString("Remoting_NullMessage")), new ErrorMessage()); } else if (!(msg is IMethodReturnMessage)) { _replyMsg = new ReturnMessage(new RemotingException(Environment.GetResourceString("Remoting_Message_BadType")), new ErrorMessage()); } else { _replyMsg = msg; } lock (this) { _isCompleted = true; if (_AsyncWaitHandle != null) { _AsyncWaitHandle.Set(); } } if (_acbd != null) { // NOTE: We are invoking user code here! // Catch and Ignore exceptions thrown from async callback user code. _acbd(this); } return null; } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] public virtual IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) { throw new NotSupportedException( Environment.GetResourceString("NotSupported_Method")); } public IMessageSink NextSink { [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)] get { return null; } } public virtual IMessage GetReplyMessage() {return _replyMsg;} private IMessageCtrl _mc; private AsyncCallback _acbd; private IMessage _replyMsg; private bool _isCompleted; private bool _endInvokeCalled; private ManualResetEvent _AsyncWaitHandle; private Delegate _asyncDelegate; private Object _asyncState; } } // 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
- DropDownList.cs
- RuntimeHandles.cs
- ErrorStyle.cs
- BoundsDrawingContextWalker.cs
- NativeMethods.cs
- RenderDataDrawingContext.cs
- AssemblyAssociatedContentFileAttribute.cs
- TextRunTypographyProperties.cs
- EntitySqlException.cs
- InternalsVisibleToAttribute.cs
- SmiSettersStream.cs
- SimpleLine.cs
- DataPagerFieldCollection.cs
- GACMembershipCondition.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- ProtocolsConfigurationHandler.cs
- XhtmlCssHandler.cs
- SliderAutomationPeer.cs
- XmlStreamStore.cs
- TrustSection.cs
- InsufficientMemoryException.cs
- ImageSource.cs
- BooleanSwitch.cs
- PlainXmlDeserializer.cs
- ActivityInstance.cs
- IPipelineRuntime.cs
- ClientData.cs
- TypeTypeConverter.cs
- Int32Rect.cs
- ContextProperty.cs
- SessionIDManager.cs
- WebPartMovingEventArgs.cs
- ScrollItemPatternIdentifiers.cs
- ISAPIRuntime.cs
- ReferentialConstraintRoleElement.cs
- EntityCommandCompilationException.cs
- XmlLanguageConverter.cs
- VBCodeProvider.cs
- OdbcConnectionPoolProviderInfo.cs
- FeatureSupport.cs
- EdgeModeValidation.cs
- DataViewSettingCollection.cs
- ParseChildrenAsPropertiesAttribute.cs
- BoundsDrawingContextWalker.cs
- ZipIOExtraFieldZip64Element.cs
- XmlSchemaComplexType.cs
- FileEnumerator.cs
- AddingNewEventArgs.cs
- MultiSelectRootGridEntry.cs
- Decimal.cs
- Property.cs
- followingquery.cs
- ImageInfo.cs
- CqlQuery.cs
- UshortList2.cs
- TransformerConfigurationWizardBase.cs
- SortedList.cs
- Size3D.cs
- ToolboxBitmapAttribute.cs
- TimersDescriptionAttribute.cs
- ActionItem.cs
- PromptStyle.cs
- HttpAsyncResult.cs
- SubpageParaClient.cs
- ImageFormatConverter.cs
- WinEventQueueItem.cs
- ResourceReferenceExpressionConverter.cs
- TreeSet.cs
- Knowncolors.cs
- SqlCachedBuffer.cs
- XPathNodeHelper.cs
- ViewStateAttachedPropertyFeature.cs
- SchemaDeclBase.cs
- MatrixCamera.cs
- XmlSerializer.cs
- SourceChangedEventArgs.cs
- PrinterUnitConvert.cs
- Code.cs
- ExponentialEase.cs
- ImageCodecInfo.cs
- PropertyValueUIItem.cs
- ColorMatrix.cs
- IDispatchConstantAttribute.cs
- DbConnectionPoolGroup.cs
- SqlCrossApplyToCrossJoin.cs
- XmlSchemaAny.cs
- SharedConnectionInfo.cs
- DrawingGroup.cs
- BaseTreeIterator.cs
- CodeCatchClause.cs
- SafeCryptoHandles.cs
- DeclarativeCatalogPart.cs
- PasswordTextNavigator.cs
- WindowsAuthenticationModule.cs
- BlurEffect.cs
- TableSectionStyle.cs
- UrlMappingsSection.cs
- FileSecurity.cs
- OleDbErrorCollection.cs
- MediaEntryAttribute.cs