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
- ListSortDescriptionCollection.cs
- WebPartConnectionsCloseVerb.cs
- ClassGenerator.cs
- FunctionParameter.cs
- GraphicsContext.cs
- TransactionScope.cs
- AssemblySettingAttributes.cs
- CharacterBufferReference.cs
- XmlCustomFormatter.cs
- HandlerFactoryCache.cs
- DataGridAutomationPeer.cs
- ConsumerConnectionPointCollection.cs
- OleDbPropertySetGuid.cs
- webclient.cs
- ListViewInsertedEventArgs.cs
- ResolveDuplexAsyncResult.cs
- AggregateNode.cs
- MobileTemplatedControlDesigner.cs
- ToolStripSplitStackLayout.cs
- Rights.cs
- XmlSchemaSequence.cs
- OdbcConnectionOpen.cs
- WebPartZoneBase.cs
- DoubleLinkListEnumerator.cs
- OrderedDictionaryStateHelper.cs
- WebPartConnectionCollection.cs
- Int16Animation.cs
- Control.cs
- ElasticEase.cs
- DefaultAssemblyResolver.cs
- AsyncOperationManager.cs
- ClientUrlResolverWrapper.cs
- ProvideValueServiceProvider.cs
- ServiceCredentialsElement.cs
- SQLUtility.cs
- SessionSwitchEventArgs.cs
- DataGridViewSelectedCellCollection.cs
- SupportingTokenDuplexChannel.cs
- InstanceData.cs
- FontCacheUtil.cs
- TextShapeableCharacters.cs
- FontCacheLogic.cs
- DataGridViewImageColumn.cs
- UnionCqlBlock.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- InvokeBase.cs
- SystemDiagnosticsSection.cs
- PenLineCapValidation.cs
- SerializationAttributes.cs
- MediaTimeline.cs
- XmlNodeReader.cs
- EntitySqlException.cs
- DataServiceExpressionVisitor.cs
- QueryCursorEventArgs.cs
- ArrayElementGridEntry.cs
- AssemblyFilter.cs
- MappingModelBuildProvider.cs
- CellNormalizer.cs
- InlinedAggregationOperator.cs
- PerformanceCounterPermissionAttribute.cs
- BamlLocalizabilityResolver.cs
- MappingException.cs
- ErrorHandler.cs
- ParenthesizePropertyNameAttribute.cs
- CodeTypeParameterCollection.cs
- UIElementIsland.cs
- MetabaseServerConfig.cs
- TextInfo.cs
- recordstate.cs
- Tokenizer.cs
- BitmapImage.cs
- FlowPosition.cs
- AppDomainShutdownMonitor.cs
- ServicePoint.cs
- ButtonFieldBase.cs
- ProcessHostMapPath.cs
- ResourceAssociationSet.cs
- WebPartZone.cs
- DbProviderSpecificTypePropertyAttribute.cs
- MulticastNotSupportedException.cs
- AutomationAttributeInfo.cs
- WinFormsSecurity.cs
- HttpRequest.cs
- ComplexObject.cs
- TypeUsage.cs
- SqlDataSourceFilteringEventArgs.cs
- IUnknownConstantAttribute.cs
- NetStream.cs
- SqlClientPermission.cs
- _RequestCacheProtocol.cs
- InternalsVisibleToAttribute.cs
- DictionarySectionHandler.cs
- EventDescriptor.cs
- VScrollBar.cs
- URIFormatException.cs
- FontFamilyValueSerializer.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- HyperLinkColumn.cs
- MulticastDelegate.cs
- ArcSegment.cs