Code:
/ FX-1434 / FX-1434 / 1.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
- WaveHeader.cs
- UInt16Storage.cs
- Label.cs
- ScaleTransform.cs
- XmlUrlEditor.cs
- DataGridCellEditEndingEventArgs.cs
- XmlSchemaAttributeGroup.cs
- TypedColumnHandler.cs
- ByteViewer.cs
- ConnectionInterfaceCollection.cs
- Type.cs
- FormsIdentity.cs
- ReadOnlyPropertyMetadata.cs
- FlowDocumentReaderAutomationPeer.cs
- TransformValueSerializer.cs
- WebPartTransformerCollection.cs
- HttpServerChannel.cs
- CommonGetThemePartSize.cs
- XamlDesignerSerializationManager.cs
- RSAOAEPKeyExchangeDeformatter.cs
- ModelPerspective.cs
- WebRequest.cs
- HuffmanTree.cs
- Size.cs
- DefaultSerializationProviderAttribute.cs
- DownloadProgressEventArgs.cs
- TextViewBase.cs
- VideoDrawing.cs
- ControlIdConverter.cs
- ToolStripSeparatorRenderEventArgs.cs
- BodyGlyph.cs
- ParameterInfo.cs
- ContainerVisual.cs
- HMACSHA384.cs
- PropertyGridDesigner.cs
- CompositeActivityCodeGenerator.cs
- StyleSelector.cs
- WebPartConnectionsCancelEventArgs.cs
- MessageVersionConverter.cs
- WebFaultClientMessageInspector.cs
- DirectionalLight.cs
- CroppedBitmap.cs
- _emptywebproxy.cs
- arabicshape.cs
- XmlTextAttribute.cs
- SrgsOneOf.cs
- NoPersistScope.cs
- ToolStripGripRenderEventArgs.cs
- ImpersonationContext.cs
- KeyFrames.cs
- WebPartConnection.cs
- SequenceFullException.cs
- XmlSchemaFacet.cs
- UnsafeCollabNativeMethods.cs
- LayoutDump.cs
- ReadOnlyCollectionBase.cs
- XmlSchemaSimpleContentRestriction.cs
- AlgoModule.cs
- URLIdentityPermission.cs
- ToolStripDropDownMenu.cs
- TemplateControlBuildProvider.cs
- TagPrefixCollection.cs
- PtsHelper.cs
- ValidationHelpers.cs
- ToolStripContentPanelDesigner.cs
- ChangePassword.cs
- RowUpdatedEventArgs.cs
- CellParaClient.cs
- OptimisticConcurrencyException.cs
- FormClosingEvent.cs
- DefaultMemberAttribute.cs
- TypeInfo.cs
- OpenFileDialog.cs
- Cursors.cs
- GroupBoxAutomationPeer.cs
- StructuralType.cs
- HttpValueCollection.cs
- EmptyQuery.cs
- RelationshipConverter.cs
- XmlDataLoader.cs
- DBProviderConfigurationHandler.cs
- RNGCryptoServiceProvider.cs
- TextSpan.cs
- RedirectionProxy.cs
- TypeResolver.cs
- SqlDependencyUtils.cs
- ListMarkerSourceInfo.cs
- UnrecognizedAssertionsBindingElement.cs
- CustomTrackingRecord.cs
- CodeTypeParameterCollection.cs
- CopyAttributesAction.cs
- SqlTypesSchemaImporter.cs
- ArrayTypeMismatchException.cs
- DataSysAttribute.cs
- FrameworkPropertyMetadata.cs
- EnvironmentPermission.cs
- precedingsibling.cs
- FileDialog.cs
- SqlRetyper.cs
- ScrollBar.cs