Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- SourceChangedEventArgs.cs
- ExpressionBuilderCollection.cs
- XmlConvert.cs
- XmlCustomFormatter.cs
- MouseEvent.cs
- CompareValidator.cs
- StackSpiller.cs
- OverloadGroupAttribute.cs
- AnnotationHelper.cs
- Lookup.cs
- FilterEventArgs.cs
- linebase.cs
- PanelStyle.cs
- Rotation3D.cs
- XamlReaderHelper.cs
- DictionaryEditChange.cs
- Triplet.cs
- RegisteredArrayDeclaration.cs
- SamlConstants.cs
- HtmlControlPersistable.cs
- WindowsTitleBar.cs
- TextOptionsInternal.cs
- HasCopySemanticsAttribute.cs
- XPathExpr.cs
- WebSysDescriptionAttribute.cs
- GenericUriParser.cs
- Int16AnimationUsingKeyFrames.cs
- TransactionManager.cs
- ParallelSeparator.xaml.cs
- FailedToStartupUIException.cs
- WpfGeneratedKnownTypes.cs
- RandomNumberGenerator.cs
- ManagedIStream.cs
- SymbolPair.cs
- FileDialogCustomPlacesCollection.cs
- ProgressiveCrcCalculatingStream.cs
- FamilyCollection.cs
- StringComparer.cs
- _HeaderInfo.cs
- DiffuseMaterial.cs
- TextComposition.cs
- COM2FontConverter.cs
- PenThreadPool.cs
- DocumentSchemaValidator.cs
- PageVisual.cs
- CreateUserWizardStep.cs
- dbdatarecord.cs
- DataGridViewComboBoxColumn.cs
- ResponseBodyWriter.cs
- SkipQueryOptionExpression.cs
- SystemSounds.cs
- PeerNodeTraceRecord.cs
- HttpFileCollectionWrapper.cs
- remotingproxy.cs
- StrongNamePublicKeyBlob.cs
- NumberFormatter.cs
- ExtendedPropertyCollection.cs
- ObjectDataSourceWizardForm.cs
- MethodBuilderInstantiation.cs
- RequestDescription.cs
- DefaultCommandConverter.cs
- DependentList.cs
- PageParser.cs
- Model3DGroup.cs
- elementinformation.cs
- SymbolEqualComparer.cs
- HttpProfileGroupBase.cs
- StructuralCache.cs
- ContentDisposition.cs
- SqlWorkflowInstanceStore.cs
- ACE.cs
- XmlWriterSettings.cs
- _Win32.cs
- WebPartConnection.cs
- XmlSchemaValidationException.cs
- IDQuery.cs
- RadialGradientBrush.cs
- SelectionUIService.cs
- LinkDesigner.cs
- IERequestCache.cs
- SubMenuStyleCollection.cs
- XmlCountingReader.cs
- MembershipSection.cs
- MessageQueueCriteria.cs
- DataContext.cs
- RepeatBehavior.cs
- CompositeFontParser.cs
- FileVersionInfo.cs
- ControlIdConverter.cs
- BindingExpressionUncommonField.cs
- ObjectDataSourceSelectingEventArgs.cs
- ExpressionBindingCollection.cs
- ClientConfigPaths.cs
- DeclarationUpdate.cs
- ScriptMethodAttribute.cs
- LinkLabelLinkClickedEvent.cs
- ManagementScope.cs
- ReferentialConstraint.cs
- Bezier.cs
- CodeGenerator.cs