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
- UnsafeNativeMethods.cs
- CodeIdentifier.cs
- GeneralTransformGroup.cs
- CatalogPartCollection.cs
- XmlSchemaAnyAttribute.cs
- XPathNodeInfoAtom.cs
- BuiltInExpr.cs
- DoubleLink.cs
- ReaderWriterLockWrapper.cs
- UriSection.cs
- Polygon.cs
- WindowsAltTab.cs
- ConfigurationSchemaErrors.cs
- Label.cs
- DataGridViewColumn.cs
- COAUTHIDENTITY.cs
- Triangle.cs
- DbModificationClause.cs
- DbMetaDataColumnNames.cs
- FilteredXmlReader.cs
- invalidudtexception.cs
- AppDomainFactory.cs
- DataControlPagerLinkButton.cs
- ObjectItemLoadingSessionData.cs
- ObjectIDGenerator.cs
- QilExpression.cs
- ToggleProviderWrapper.cs
- RotateTransform.cs
- DocumentOrderComparer.cs
- ClientScriptItem.cs
- XmlElementList.cs
- CodeNamespaceImport.cs
- XmlFormatReaderGenerator.cs
- XmlDataProvider.cs
- CodeRemoveEventStatement.cs
- GuidelineCollection.cs
- WindowsBrush.cs
- ValueConversionAttribute.cs
- FormViewUpdatedEventArgs.cs
- NotificationContext.cs
- SafeNativeMethods.cs
- RotateTransform3D.cs
- RequestCachePolicyConverter.cs
- DnsPermission.cs
- AsyncDataRequest.cs
- BaseAppDomainProtocolHandler.cs
- SQLMoney.cs
- NetMsmqBindingElement.cs
- AVElementHelper.cs
- FileStream.cs
- PathFigure.cs
- RelationshipConverter.cs
- EndpointIdentityConverter.cs
- VariantWrapper.cs
- XmlImplementation.cs
- BitmapScalingModeValidation.cs
- TemplateLookupAction.cs
- Helpers.cs
- objectquery_tresulttype.cs
- SiteMapDataSourceView.cs
- SwitchCase.cs
- COAUTHIDENTITY.cs
- _ConnectionGroup.cs
- DBConnectionString.cs
- CodeDOMUtility.cs
- FilterQuery.cs
- ConnectionProviderAttribute.cs
- InvalidEnumArgumentException.cs
- Object.cs
- UriSection.cs
- SchemaNotation.cs
- WizardForm.cs
- documentation.cs
- Int32Rect.cs
- VisualCollection.cs
- XmlILTrace.cs
- TextWriter.cs
- DoubleCollectionConverter.cs
- EnumMember.cs
- ActivityInstanceMap.cs
- Transform3DGroup.cs
- UndirectedGraph.cs
- WindowsListViewSubItem.cs
- DelayDesigner.cs
- AstNode.cs
- MeshGeometry3D.cs
- KeyMatchBuilder.cs
- Drawing.cs
- CallContext.cs
- SettingsContext.cs
- DataGridViewCellConverter.cs
- TrackingMemoryStreamFactory.cs
- WebPartCloseVerb.cs
- WebPartConnectionsConnectVerb.cs
- VisualBrush.cs
- SmiRecordBuffer.cs
- Stack.cs
- TypeConverter.cs
- XmlName.cs
- HtmlTableCellCollection.cs