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
- ConnectionManagementElement.cs
- ResXResourceReader.cs
- Matrix.cs
- PropertyGridCommands.cs
- SelectingProviderEventArgs.cs
- X509WindowsSecurityToken.cs
- ControlAdapter.cs
- InstancePersistenceEvent.cs
- HtmlLink.cs
- FileSystemEventArgs.cs
- ImpersonateTokenRef.cs
- DataGridViewSelectedRowCollection.cs
- _CommandStream.cs
- BehaviorEditorPart.cs
- ControlBuilder.cs
- WindowsTokenRoleProvider.cs
- ApplicationTrust.cs
- XamlFilter.cs
- ShaderRenderModeValidation.cs
- CounterSampleCalculator.cs
- QilScopedVisitor.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- DataGridAutoFormat.cs
- WebPartActionVerb.cs
- ZipIOCentralDirectoryBlock.cs
- UpdatePanel.cs
- StrongNameMembershipCondition.cs
- ObjectIDGenerator.cs
- NativeRightsManagementAPIsStructures.cs
- BasicExpandProvider.cs
- HostingEnvironmentException.cs
- ContentPlaceHolder.cs
- Shared.cs
- GenericTypeParameterBuilder.cs
- StorageEntitySetMapping.cs
- HostedHttpTransportManager.cs
- XmlSchemaImporter.cs
- GridViewSortEventArgs.cs
- XmlSchemaType.cs
- FilteredDataSetHelper.cs
- PostBackOptions.cs
- LayoutDump.cs
- LogFlushAsyncResult.cs
- Wizard.cs
- EmptyStringExpandableObjectConverter.cs
- ResourceReferenceExpressionConverter.cs
- DataGridDesigner.cs
- PropertyItemInternal.cs
- MULTI_QI.cs
- XmlAnyElementAttributes.cs
- HtmlFormParameterReader.cs
- ItemsPanelTemplate.cs
- LoginCancelEventArgs.cs
- DynamicUpdateCommand.cs
- MaskedTextBox.cs
- InternalControlCollection.cs
- EntityDataSourceWizardForm.cs
- CodeValidator.cs
- DesignBindingValueUIHandler.cs
- SemanticTag.cs
- WebPartConnectionsEventArgs.cs
- Themes.cs
- DecoratedNameAttribute.cs
- SubqueryRules.cs
- DesignerForm.cs
- DashStyles.cs
- SequenceNumber.cs
- InlineCollection.cs
- PartialCachingControl.cs
- BooleanFunctions.cs
- SettingsAttributeDictionary.cs
- XmlSchemaSimpleContent.cs
- ASCIIEncoding.cs
- ListParaClient.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- BaseTemplateParser.cs
- _Rfc2616CacheValidators.cs
- RSAProtectedConfigurationProvider.cs
- DeleteIndexBinder.cs
- ProcessThreadCollection.cs
- ColorConverter.cs
- _UriTypeConverter.cs
- OutOfMemoryException.cs
- CoTaskMemHandle.cs
- TextAction.cs
- MethodCallConverter.cs
- CodeTypeDeclarationCollection.cs
- IMembershipProvider.cs
- XmlReader.cs
- SqlNodeTypeOperators.cs
- DataGridViewColumn.cs
- RegistryPermission.cs
- WorkflowInstanceExtensionManager.cs
- SqlServer2KCompatibilityAnnotation.cs
- ZoomPercentageConverter.cs
- SafeSecurityHandles.cs
- StatusStrip.cs
- TextFormatterHost.cs
- TransformerTypeCollection.cs
- PrinterSettings.cs