Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / CompMod / System / ComponentModel / AsyncOperation.cs / 1 / AsyncOperation.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.ComponentModel
{
using System.Security.Permissions;
using System.Threading;
[HostProtection(SharedState = true)]
public sealed class AsyncOperation
{
private SynchronizationContext syncContext;
private object userSuppliedState;
private bool alreadyCompleted;
///
/// Constructor. Protected to avoid unwitting usage - AsyncOperation objects
/// are typically created by AsyncOperationManager calling CreateOperation.
///
private AsyncOperation(object userSuppliedState, SynchronizationContext syncContext)
{
this.userSuppliedState = userSuppliedState;
this.syncContext = syncContext;
this.alreadyCompleted = false;
this.syncContext.OperationStarted();
}
///
/// Destructor. Guarantees that [....] context will always get notified of completion.
///
~AsyncOperation()
{
if (!alreadyCompleted && syncContext != null)
{
syncContext.OperationCompleted();
}
}
public object UserSuppliedState
{
get { return userSuppliedState; }
}
///
public SynchronizationContext SynchronizationContext
{
get
{
return syncContext;
}
}
public void Post(SendOrPostCallback d, object arg)
{
VerifyNotCompleted();
VerifyDelegateNotNull(d);
syncContext.Post(d, arg);
}
public void PostOperationCompleted(SendOrPostCallback d, object arg)
{
Post(d, arg);
OperationCompletedCore();
}
public void OperationCompleted()
{
VerifyNotCompleted();
OperationCompletedCore();
}
private void OperationCompletedCore()
{
try
{
syncContext.OperationCompleted();
}
finally
{
alreadyCompleted = true;
GC.SuppressFinalize(this);
}
}
private void VerifyNotCompleted()
{
if (alreadyCompleted)
{
throw new InvalidOperationException(SR.GetString(SR.Async_OperationAlreadyCompleted));
}
}
private void VerifyDelegateNotNull(SendOrPostCallback d)
{
if (d == null)
{
throw new ArgumentNullException(SR.GetString(SR.Async_NullDelegate), "d");
}
}
///
/// Only for use by AsyncOperationManager to create new AsyncOperation objects
///
internal static AsyncOperation CreateOperation(object userSuppliedState, SynchronizationContext syncContext)
{
AsyncOperation newOp = new AsyncOperation(userSuppliedState, syncContext);
return newOp;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.ComponentModel
{
using System.Security.Permissions;
using System.Threading;
[HostProtection(SharedState = true)]
public sealed class AsyncOperation
{
private SynchronizationContext syncContext;
private object userSuppliedState;
private bool alreadyCompleted;
///
/// Constructor. Protected to avoid unwitting usage - AsyncOperation objects
/// are typically created by AsyncOperationManager calling CreateOperation.
///
private AsyncOperation(object userSuppliedState, SynchronizationContext syncContext)
{
this.userSuppliedState = userSuppliedState;
this.syncContext = syncContext;
this.alreadyCompleted = false;
this.syncContext.OperationStarted();
}
///
/// Destructor. Guarantees that [....] context will always get notified of completion.
///
~AsyncOperation()
{
if (!alreadyCompleted && syncContext != null)
{
syncContext.OperationCompleted();
}
}
public object UserSuppliedState
{
get { return userSuppliedState; }
}
///
public SynchronizationContext SynchronizationContext
{
get
{
return syncContext;
}
}
public void Post(SendOrPostCallback d, object arg)
{
VerifyNotCompleted();
VerifyDelegateNotNull(d);
syncContext.Post(d, arg);
}
public void PostOperationCompleted(SendOrPostCallback d, object arg)
{
Post(d, arg);
OperationCompletedCore();
}
public void OperationCompleted()
{
VerifyNotCompleted();
OperationCompletedCore();
}
private void OperationCompletedCore()
{
try
{
syncContext.OperationCompleted();
}
finally
{
alreadyCompleted = true;
GC.SuppressFinalize(this);
}
}
private void VerifyNotCompleted()
{
if (alreadyCompleted)
{
throw new InvalidOperationException(SR.GetString(SR.Async_OperationAlreadyCompleted));
}
}
private void VerifyDelegateNotNull(SendOrPostCallback d)
{
if (d == null)
{
throw new ArgumentNullException(SR.GetString(SR.Async_NullDelegate), "d");
}
}
///
/// Only for use by AsyncOperationManager to create new AsyncOperation objects
///
internal static AsyncOperation CreateOperation(object userSuppliedState, SynchronizationContext syncContext)
{
AsyncOperation newOp = new AsyncOperation(userSuppliedState, syncContext);
return newOp;
}
}
}
// 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
- coordinatorfactory.cs
- LayoutEngine.cs
- XmlNodeReader.cs
- QfeChecker.cs
- StyleXamlParser.cs
- ToolStripTemplateNode.cs
- OperationAbortedException.cs
- BamlTreeUpdater.cs
- XmlSchemaAppInfo.cs
- WebPartCancelEventArgs.cs
- XmlFormatReaderGenerator.cs
- TypedMessageConverter.cs
- GlyphRunDrawing.cs
- FragmentQueryProcessor.cs
- BinHexEncoding.cs
- RawStylusSystemGestureInputReport.cs
- BitSet.cs
- DesigntimeLicenseContext.cs
- _AcceptOverlappedAsyncResult.cs
- SiteMapNodeCollection.cs
- RecordsAffectedEventArgs.cs
- ConfigurationLocation.cs
- Lease.cs
- ApplicationHost.cs
- QuaternionAnimationBase.cs
- ComplexBindingPropertiesAttribute.cs
- EventMap.cs
- ActivityExecutionContextCollection.cs
- _ListenerResponseStream.cs
- MaterialGroup.cs
- ManagedWndProcTracker.cs
- Camera.cs
- DataShape.cs
- ProjectionCamera.cs
- TypeValidationEventArgs.cs
- HtmlInputFile.cs
- EventMappingSettingsCollection.cs
- DrawingVisual.cs
- CultureInfo.cs
- RegexRunnerFactory.cs
- BitStream.cs
- SafeCryptContextHandle.cs
- KeyProperty.cs
- IResourceProvider.cs
- Style.cs
- InfiniteIntConverter.cs
- SqlBulkCopy.cs
- OptionalRstParameters.cs
- AsymmetricKeyExchangeFormatter.cs
- WinEventQueueItem.cs
- OSFeature.cs
- StateDesigner.cs
- Parallel.cs
- EventLogTraceListener.cs
- CacheManager.cs
- XamlToRtfParser.cs
- TemplateInstanceAttribute.cs
- IdleTimeoutMonitor.cs
- WebPartTransformerCollection.cs
- NavigationCommands.cs
- SimpleFieldTemplateUserControl.cs
- TraceRecord.cs
- ScriptReferenceEventArgs.cs
- ConstraintStruct.cs
- UInt64.cs
- DataGridItem.cs
- InkCanvasAutomationPeer.cs
- SiteMapNodeItem.cs
- Int16KeyFrameCollection.cs
- X509Certificate2Collection.cs
- printdlgexmarshaler.cs
- COM2ExtendedBrowsingHandler.cs
- SafeNativeMethods.cs
- SHA384Managed.cs
- NonVisualControlAttribute.cs
- TypeBuilder.cs
- ProfileService.cs
- prompt.cs
- HtmlTableCell.cs
- EventLogEntry.cs
- SessionStateContainer.cs
- GenerateScriptTypeAttribute.cs
- FileReader.cs
- Publisher.cs
- Formatter.cs
- NestPullup.cs
- Brushes.cs
- AstTree.cs
- AnonymousIdentificationModule.cs
- ILGenerator.cs
- ProxyWebPartManager.cs
- XmlDataSourceNodeDescriptor.cs
- SettingsPropertyIsReadOnlyException.cs
- ObjectDataSourceStatusEventArgs.cs
- ClientConfigurationHost.cs
- KeyPullup.cs
- LinkArea.cs
- QilBinary.cs
- AutoGeneratedField.cs
- ColorConverter.cs