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
- BitmapEffectOutputConnector.cs
- IIS7WorkerRequest.cs
- Vector3DConverter.cs
- MatrixCamera.cs
- XmlSchemaChoice.cs
- Math.cs
- GCHandleCookieTable.cs
- PageParser.cs
- ConsoleKeyInfo.cs
- ListBoxChrome.cs
- BasicCellRelation.cs
- ItemAutomationPeer.cs
- SchemaTableOptionalColumn.cs
- TypefaceMap.cs
- Vector.cs
- GraphicsPathIterator.cs
- CryptoConfig.cs
- ObjectDataSource.cs
- LocatorGroup.cs
- ProcessThreadCollection.cs
- UnSafeCharBuffer.cs
- OleDbErrorCollection.cs
- GridToolTip.cs
- SqlReorderer.cs
- DataGridViewColumnEventArgs.cs
- PieceNameHelper.cs
- WebServiceData.cs
- DrawingContext.cs
- DBParameter.cs
- AttachedPropertyBrowsableAttribute.cs
- MethodBody.cs
- SafeMILHandle.cs
- SymbolDocumentInfo.cs
- TextTreeObjectNode.cs
- Closure.cs
- IMembershipProvider.cs
- XmlArrayAttribute.cs
- ToolStripCollectionEditor.cs
- AttributedMetaModel.cs
- XmlILCommand.cs
- GeneralTransform3D.cs
- BindUriHelper.cs
- SqlParameterizer.cs
- WebCodeGenerator.cs
- DataPagerFieldCollection.cs
- CellIdBoolean.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- XmlLanguage.cs
- QuaternionAnimationBase.cs
- GroupLabel.cs
- LogLogRecord.cs
- DataGridViewSelectedRowCollection.cs
- HostedTransportConfigurationManager.cs
- TabletDevice.cs
- ButtonBase.cs
- DataServiceRequestException.cs
- Setter.cs
- InstanceContextManager.cs
- PasswordTextNavigator.cs
- LinqDataSourceSelectEventArgs.cs
- CustomValidator.cs
- Random.cs
- SystemResourceHost.cs
- IERequestCache.cs
- FontDifferentiator.cs
- QilNode.cs
- CounterSample.cs
- AssertUtility.cs
- IdnMapping.cs
- CommentEmitter.cs
- SQLDateTime.cs
- GacUtil.cs
- SystemWebExtensionsSectionGroup.cs
- SynchronizationScope.cs
- unsafenativemethodsother.cs
- ColumnResult.cs
- mansign.cs
- Query.cs
- AssertSection.cs
- WindowsTokenRoleProvider.cs
- ConfigViewGenerator.cs
- KeySplineConverter.cs
- ConnectionConsumerAttribute.cs
- OrthographicCamera.cs
- SocketInformation.cs
- OdbcCommandBuilder.cs
- clipboard.cs
- TextBoxBase.cs
- InfoCardSymmetricCrypto.cs
- XmlCodeExporter.cs
- CryptoConfig.cs
- HtmlTableRow.cs
- Themes.cs
- ConnectionManagementSection.cs
- BufferedGraphicsContext.cs
- LineUtil.cs
- SizeAnimationClockResource.cs
- Char.cs
- ConfigurationPermission.cs
- GeneralTransform2DTo3DTo2D.cs