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
- StrokeNode.cs
- View.cs
- RadioButtonFlatAdapter.cs
- XmlSchemaFacet.cs
- CachedFontFace.cs
- AggregationMinMaxHelpers.cs
- EncryptedData.cs
- Listbox.cs
- GroupItem.cs
- Size.cs
- ConcurrentDictionary.cs
- SmiEventSink_DeferedProcessing.cs
- DoubleAnimationUsingKeyFrames.cs
- Canvas.cs
- AnimatedTypeHelpers.cs
- Control.cs
- TypeProvider.cs
- DesignerActionUIService.cs
- BindStream.cs
- DataGridViewSelectedRowCollection.cs
- SendKeys.cs
- ParenthesizePropertyNameAttribute.cs
- XPathNavigator.cs
- Serializer.cs
- KeyToListMap.cs
- InvalidContentTypeException.cs
- EntityTypeEmitter.cs
- TdsParserHelperClasses.cs
- Speller.cs
- ThreadExceptionDialog.cs
- DES.cs
- InitializeCorrelation.cs
- SafeSerializationManager.cs
- IisTraceListener.cs
- DecimalConverter.cs
- IntPtr.cs
- CompensatableSequenceActivity.cs
- CfgParser.cs
- ListItemParagraph.cs
- XmlSiteMapProvider.cs
- MemberProjectionIndex.cs
- PropertyContainer.cs
- TextEvent.cs
- Menu.cs
- SimpleBitVector32.cs
- JavaScriptString.cs
- DataControlButton.cs
- LogFlushAsyncResult.cs
- DatagridviewDisplayedBandsData.cs
- GreenMethods.cs
- sqlcontext.cs
- SaveFileDialog.cs
- XsltOutput.cs
- DesignerAutoFormatCollection.cs
- CacheModeValueSerializer.cs
- PolicyStatement.cs
- ImageKeyConverter.cs
- RTLAwareMessageBox.cs
- LogReserveAndAppendState.cs
- RawStylusSystemGestureInputReport.cs
- PrimitiveXmlSerializers.cs
- SerializationSectionGroup.cs
- TextContainerChangeEventArgs.cs
- XmlElementCollection.cs
- OdbcConnectionOpen.cs
- QuerySelectOp.cs
- ParserExtension.cs
- ActivityValidationServices.cs
- FileSystemWatcher.cs
- CoTaskMemUnicodeSafeHandle.cs
- TextEditor.cs
- WebConfigurationHostFileChange.cs
- _NetworkingPerfCounters.cs
- printdlgexmarshaler.cs
- QueryCacheEntry.cs
- ClientData.cs
- CounterCreationDataCollection.cs
- SqlWebEventProvider.cs
- SqlConnection.cs
- UpdateEventArgs.cs
- DiscreteKeyFrames.cs
- COMException.cs
- HttpMethodAttribute.cs
- DoubleUtil.cs
- TcpHostedTransportConfiguration.cs
- InputScopeConverter.cs
- WsatServiceAddress.cs
- CustomWebEventKey.cs
- TypeRefElement.cs
- RadioButtonRenderer.cs
- OdbcInfoMessageEvent.cs
- _BaseOverlappedAsyncResult.cs
- RtfControls.cs
- XmlSchemaValidator.cs
- DataContractSerializerOperationBehavior.cs
- _UncName.cs
- BaseUriHelper.cs
- FixedSOMSemanticBox.cs
- ParameterRefs.cs
- EventListenerClientSide.cs