Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Runtime / Remoting / AsyncResult.cs / 2 / 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
- PageEventArgs.cs
- WSTrust.cs
- MenuItemStyleCollection.cs
- RsaEndpointIdentity.cs
- AtomEntry.cs
- XmlWrappingReader.cs
- InputLanguage.cs
- DirectoryRootQuery.cs
- ComboBoxAutomationPeer.cs
- xml.cs
- TagElement.cs
- StylusPointPropertyUnit.cs
- AutomationProperties.cs
- TagMapCollection.cs
- RequestSecurityTokenForGetBrowserToken.cs
- XmlSchemaObjectTable.cs
- IndexedGlyphRun.cs
- SamlAuthenticationStatement.cs
- LinqDataSource.cs
- RelatedPropertyManager.cs
- LogSwitch.cs
- StickyNote.cs
- ProfilePropertyNameValidator.cs
- DocumentViewerBase.cs
- LinkClickEvent.cs
- ServiceModelStringsVersion1.cs
- Rotation3D.cs
- OdbcStatementHandle.cs
- EventManager.cs
- LocatorPartList.cs
- DataControlCommands.cs
- MaskInputRejectedEventArgs.cs
- Normalization.cs
- StylusTip.cs
- ObjRef.cs
- AdjustableArrowCap.cs
- SecurityElement.cs
- FixedDSBuilder.cs
- Script.cs
- XmlNodeChangedEventManager.cs
- BuilderInfo.cs
- PeerTransportSecuritySettings.cs
- RunClient.cs
- CompilerError.cs
- UnionExpr.cs
- IsolatedStorageFile.cs
- BeginEvent.cs
- GlyphTypeface.cs
- ObfuscationAttribute.cs
- Rotation3DAnimationUsingKeyFrames.cs
- OracleRowUpdatingEventArgs.cs
- OutputCacheSettings.cs
- WebControlAdapter.cs
- ContextItem.cs
- Rules.cs
- OpCodes.cs
- EventRoute.cs
- AspNetHostingPermission.cs
- StrokeCollection2.cs
- CodeArrayCreateExpression.cs
- Compress.cs
- RoutedCommand.cs
- ViewBase.cs
- ExpressionVisitor.cs
- RsaSecurityToken.cs
- SecurityProtocolCorrelationState.cs
- UrlPath.cs
- WebPartUtil.cs
- XamlStream.cs
- Timer.cs
- XmlName.cs
- BinaryWriter.cs
- Single.cs
- CommandBindingCollection.cs
- SessionState.cs
- XamlWriterExtensions.cs
- ListControl.cs
- BaseHashHelper.cs
- CryptoKeySecurity.cs
- TemplateBaseAction.cs
- NextPreviousPagerField.cs
- DataGridBoolColumn.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- ServiceContractDetailViewControl.cs
- StrongTypingException.cs
- hresults.cs
- RootProfilePropertySettingsCollection.cs
- BinaryObjectWriter.cs
- ListViewDataItem.cs
- HelloMessageApril2005.cs
- StylusPoint.cs
- DataGridSortCommandEventArgs.cs
- IPGlobalProperties.cs
- WebPartCatalogAddVerb.cs
- ResourceCategoryAttribute.cs
- XmlSerializationWriter.cs
- TextEffect.cs
- TextRangeEdit.cs
- CustomLineCap.cs
- InternalConfigRoot.cs