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
- MergeFailedEvent.cs
- DrawingContextWalker.cs
- SafeNativeMethods.cs
- SqlMethodCallConverter.cs
- ControllableStoryboardAction.cs
- PrintDialog.cs
- _FixedSizeReader.cs
- IISUnsafeMethods.cs
- DataContractAttribute.cs
- BamlTreeMap.cs
- EmptyStringExpandableObjectConverter.cs
- DefinitionUpdate.cs
- XmlReader.cs
- TypedColumnHandler.cs
- TextComposition.cs
- ErrorHandler.cs
- CellConstantDomain.cs
- XPathException.cs
- InvalidateEvent.cs
- BinaryConverter.cs
- DbSourceCommand.cs
- KeyInstance.cs
- WorkflowOperationFault.cs
- XmlDigitalSignatureProcessor.cs
- SystemSounds.cs
- ExpressionPrinter.cs
- UserPreferenceChangingEventArgs.cs
- MenuCommands.cs
- PropertyGridView.cs
- Membership.cs
- PassportIdentity.cs
- Compiler.cs
- ObjectSpanRewriter.cs
- WmiEventSink.cs
- QuerySettings.cs
- DataError.cs
- BamlRecords.cs
- ManipulationInertiaStartingEventArgs.cs
- ByteArrayHelperWithString.cs
- PasswordDeriveBytes.cs
- XmlDocumentType.cs
- Vector3DKeyFrameCollection.cs
- KeyFrames.cs
- ObjRef.cs
- NodeInfo.cs
- ReadOnlyHierarchicalDataSource.cs
- SelectingProviderEventArgs.cs
- EntityStoreSchemaFilterEntry.cs
- ValueType.cs
- ConnectivityStatus.cs
- IncrementalReadDecoders.cs
- UrlAuthFailureHandler.cs
- XmlSchemaComplexContent.cs
- SortExpressionBuilder.cs
- PopupRoot.cs
- Grammar.cs
- CssTextWriter.cs
- TemplatePartAttribute.cs
- EventRoute.cs
- DispatcherOperation.cs
- ContextMenuStrip.cs
- AttachedAnnotationChangedEventArgs.cs
- CompositeDuplexBindingElement.cs
- ColumnClickEvent.cs
- Lock.cs
- PropertyGeneratedEventArgs.cs
- XmlSchemaGroup.cs
- ModelVisual3D.cs
- BindableTemplateBuilder.cs
- __Filters.cs
- BitmapPalette.cs
- AggregateNode.cs
- ActivityTypeDesigner.xaml.cs
- SecurityContext.cs
- DayRenderEvent.cs
- WhitespaceRuleReader.cs
- ExpressionVisitor.cs
- CachedPathData.cs
- ConfigurationValues.cs
- InputLanguageCollection.cs
- CacheHelper.cs
- HtmlHistory.cs
- Point3DAnimationUsingKeyFrames.cs
- DeploymentExceptionMapper.cs
- XslTransform.cs
- HuffCodec.cs
- AccessibilityHelperForVista.cs
- FormsIdentity.cs
- WindowsPrincipal.cs
- RadioButtonList.cs
- Queue.cs
- Publisher.cs
- SyndicationPerson.cs
- RequiredAttributeAttribute.cs
- WebPartManager.cs
- XmlSchemaDocumentation.cs
- PropertyChangeTracker.cs
- TypeSchema.cs
- X509CertificateTokenFactoryCredential.cs
- WebPartConnectionsDisconnectVerb.cs