Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- PassportAuthenticationModule.cs
- dataSvcMapFileLoader.cs
- FontFamilyConverter.cs
- ConditionCollection.cs
- CodeIdentifier.cs
- DefaultMemberAttribute.cs
- ScrollChrome.cs
- PiiTraceSource.cs
- StructureChangedEventArgs.cs
- SubMenuStyle.cs
- CaseStatement.cs
- DrawListViewColumnHeaderEventArgs.cs
- DynamicValidator.cs
- SerializationEventsCache.cs
- DockPattern.cs
- EditorPartCollection.cs
- BufferBuilder.cs
- EmptyEnumerator.cs
- MinimizableAttributeTypeConverter.cs
- UdpConstants.cs
- InternalsVisibleToAttribute.cs
- SqlEnums.cs
- ImplicitInputBrush.cs
- GPPOINTF.cs
- SoapServerMessage.cs
- ProtocolsConfiguration.cs
- SafeArrayRankMismatchException.cs
- PermissionSet.cs
- MultiBinding.cs
- BitArray.cs
- StreamUpdate.cs
- WorkflowRuntimeServiceElementCollection.cs
- BookmarkEventArgs.cs
- FixedSOMPageConstructor.cs
- Comparer.cs
- TabItemAutomationPeer.cs
- Composition.cs
- _SslStream.cs
- LocatorPart.cs
- ReceiveMessageContent.cs
- DataGridDetailsPresenterAutomationPeer.cs
- AccessDataSourceView.cs
- XpsDocumentEvent.cs
- SessionState.cs
- SessionIDManager.cs
- ExpandedWrapper.cs
- HtmlMobileTextWriter.cs
- SrgsSubset.cs
- CodeComment.cs
- DbConnectionFactory.cs
- Update.cs
- KeyConstraint.cs
- SpeakProgressEventArgs.cs
- DropShadowBitmapEffect.cs
- FormattedTextSymbols.cs
- DayRenderEvent.cs
- DataReceivedEventArgs.cs
- sqlmetadatafactory.cs
- RepeatButtonAutomationPeer.cs
- ImageMap.cs
- Transform3DGroup.cs
- WebBaseEventKeyComparer.cs
- DashStyles.cs
- ControlIdConverter.cs
- Parser.cs
- SubclassTypeValidatorAttribute.cs
- MatrixIndependentAnimationStorage.cs
- EditorOptionAttribute.cs
- ProgressiveCrcCalculatingStream.cs
- CommandConverter.cs
- CalendarTable.cs
- __ConsoleStream.cs
- RegexTree.cs
- NullReferenceException.cs
- StringWriter.cs
- LayoutTable.cs
- ResolveCriteria.cs
- BmpBitmapEncoder.cs
- XmlDesignerDataSourceView.cs
- GeometryHitTestResult.cs
- CodeExpressionStatement.cs
- RegisteredScript.cs
- PeerCollaborationPermission.cs
- SqlCrossApplyToCrossJoin.cs
- DoubleMinMaxAggregationOperator.cs
- SequentialUshortCollection.cs
- QuotedPrintableStream.cs
- DataGridViewCellStyleConverter.cs
- DictionaryEntry.cs
- Graphics.cs
- X509CertificateStore.cs
- Setter.cs
- XmlTypeMapping.cs
- ReachDocumentReferenceSerializer.cs
- Decorator.cs
- Relationship.cs
- ClientUtils.cs
- RelationshipManager.cs
- WindowsAltTab.cs
- CodeCommentStatementCollection.cs