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
- XmlSchema.cs
- DelegateSerializationHolder.cs
- ComEventsInfo.cs
- Socket.cs
- WebMessageEncodingBindingElement.cs
- ScrollBarAutomationPeer.cs
- ZipIOLocalFileDataDescriptor.cs
- PropertyGrid.cs
- ObjectItemLoadingSessionData.cs
- SmtpMail.cs
- LockRecursionException.cs
- StringDictionary.cs
- SubclassTypeValidatorAttribute.cs
- IntSecurity.cs
- CompilationLock.cs
- Font.cs
- ImageAnimator.cs
- MethodCallConverter.cs
- InstanceOwnerException.cs
- PrintPreviewControl.cs
- BooleanToVisibilityConverter.cs
- SchemaMapping.cs
- SessionStateModule.cs
- TypePropertyEditor.cs
- JoinElimination.cs
- OdbcCommandBuilder.cs
- StoryFragments.cs
- ListItem.cs
- StreamingContext.cs
- ItemAutomationPeer.cs
- DataIdProcessor.cs
- Registry.cs
- AccessKeyManager.cs
- StringResourceManager.cs
- ProvidersHelper.cs
- ModuleBuilderData.cs
- PageThemeParser.cs
- GenericUriParser.cs
- MetadataArtifactLoaderCompositeFile.cs
- Ray3DHitTestResult.cs
- TypeSystem.cs
- MissingFieldException.cs
- XmlCustomFormatter.cs
- PeerSecurityHelpers.cs
- ActivationServices.cs
- LineInfo.cs
- DesignerActionItem.cs
- DecimalStorage.cs
- ReferencedAssembly.cs
- DataSpaceManager.cs
- SamlSubjectStatement.cs
- CheckBoxField.cs
- CommandField.cs
- CustomPopupPlacement.cs
- BrowserDefinitionCollection.cs
- MemberBinding.cs
- DataControlField.cs
- XPathBinder.cs
- ImageMapEventArgs.cs
- Button.cs
- RepeatInfo.cs
- Vector3DConverter.cs
- SimpleMailWebEventProvider.cs
- Triangle.cs
- AdornerPresentationContext.cs
- HtmlHead.cs
- DoubleLink.cs
- UntypedNullExpression.cs
- XmlToDatasetMap.cs
- CodeMethodInvokeExpression.cs
- DbProviderConfigurationHandler.cs
- XMLDiffLoader.cs
- DbConnectionFactory.cs
- SystemFonts.cs
- ChannelDispatcher.cs
- XmlComplianceUtil.cs
- COM2IProvidePropertyBuilderHandler.cs
- BinHexDecoder.cs
- BuildProviderUtils.cs
- SolidColorBrush.cs
- PointIndependentAnimationStorage.cs
- JsonDeserializer.cs
- DbConnectionStringCommon.cs
- ServiceDeploymentInfo.cs
- DocumentGrid.cs
- ServiceDeploymentInfo.cs
- Identity.cs
- XPathArrayIterator.cs
- Animatable.cs
- GlyphRunDrawing.cs
- XmlText.cs
- DataSourceCacheDurationConverter.cs
- RadioButton.cs
- SvcMapFileLoader.cs
- printdlgexmarshaler.cs
- DetailsViewRow.cs
- CodeEventReferenceExpression.cs
- InlinedAggregationOperator.cs
- TypeGeneratedEventArgs.cs
- DataObjectMethodAttribute.cs