Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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(false); } } } 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; } _isCompleted = true; FaultInWaitHandle(); _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; } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WorkflowInstance.cs
- LinkedResource.cs
- NativeBuffer.cs
- Matrix.cs
- MemberBinding.cs
- UiaCoreTypesApi.cs
- MessageQueueKey.cs
- Point3DCollection.cs
- ToolStripDropDownClosedEventArgs.cs
- MdiWindowListStrip.cs
- ProxyGenerationError.cs
- SQLRoleProvider.cs
- AttributeEmitter.cs
- DiagnosticTrace.cs
- RelatedImageListAttribute.cs
- ListControl.cs
- Flowchart.cs
- ConfigurationStrings.cs
- HWStack.cs
- Column.cs
- RectAnimationUsingKeyFrames.cs
- ToolStripScrollButton.cs
- DoubleLinkList.cs
- TimeSpanConverter.cs
- InternalDuplexBindingElement.cs
- CustomValidator.cs
- HwndHostAutomationPeer.cs
- Label.cs
- SamlAuthenticationStatement.cs
- OleDbConnectionFactory.cs
- DateTimeFormatInfo.cs
- IndexerNameAttribute.cs
- GridEntry.cs
- XamlReader.cs
- EmptyEnumerator.cs
- BitmapEffect.cs
- NGCSerializationManager.cs
- ConfigXmlText.cs
- PeerNodeTraceRecord.cs
- UrlPath.cs
- X509Utils.cs
- OverrideMode.cs
- DocumentGrid.cs
- RubberbandSelector.cs
- RelatedEnd.cs
- WebBrowserNavigatedEventHandler.cs
- GeometryConverter.cs
- SafeArrayTypeMismatchException.cs
- ThreadAbortException.cs
- StateChangeEvent.cs
- DefaultMergeHelper.cs
- ReachSerializableProperties.cs
- FieldCollectionEditor.cs
- TextRenderingModeValidation.cs
- DeobfuscatingStream.cs
- EditorBrowsableAttribute.cs
- MulticastIPAddressInformationCollection.cs
- DataMemberAttribute.cs
- KeyPullup.cs
- SyndicationDeserializer.cs
- HttpChannelListener.cs
- Model3D.cs
- XpsSerializerWriter.cs
- MachineKeySection.cs
- SpotLight.cs
- SafeThreadHandle.cs
- XmlQualifiedName.cs
- DataPointer.cs
- QueryOutputWriter.cs
- SQLBytes.cs
- FontConverter.cs
- CqlQuery.cs
- SqlSelectStatement.cs
- FileInfo.cs
- CommandBindingCollection.cs
- ExceptionUtil.cs
- ProviderCollection.cs
- ZoneLinkButton.cs
- GraphicsPath.cs
- WorkflowElementDialog.cs
- ListChunk.cs
- ButtonAutomationPeer.cs
- DetailsViewRow.cs
- ConfigurationLockCollection.cs
- SelectorAutomationPeer.cs
- HttpModuleAction.cs
- ServiceOperation.cs
- TextProperties.cs
- CodeExpressionStatement.cs
- DataPager.cs
- ToolStripContextMenu.cs
- Selector.cs
- Brushes.cs
- WindowPattern.cs
- DescriptionAttribute.cs
- SettingsPropertyValue.cs
- ActivityExecutor.cs
- MenuItemBinding.cs
- DnsCache.cs
- PropertyInformation.cs