Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / ComponentModel / AsyncOperation.cs / 1305376 / 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
- WebWorkflowRole.cs
- TextFormatter.cs
- wmiprovider.cs
- ListViewDataItem.cs
- SystemIcons.cs
- HwndHost.cs
- TextAutomationPeer.cs
- PeerCollaboration.cs
- TransformProviderWrapper.cs
- OutOfMemoryException.cs
- TransformedBitmap.cs
- RectAnimation.cs
- EdmItemCollection.cs
- LayoutEditorPart.cs
- DataGridViewCheckBoxColumn.cs
- Point.cs
- ErrorHandlerModule.cs
- SmiRecordBuffer.cs
- HttpCapabilitiesBase.cs
- ChannelEndpointElementCollection.cs
- UpdatePanelTrigger.cs
- ToolStripMenuItem.cs
- SiteMapHierarchicalDataSourceView.cs
- AutomationPatternInfo.cs
- MetadataItem.cs
- FixedNode.cs
- FederatedMessageSecurityOverHttpElement.cs
- ButtonPopupAdapter.cs
- SystemEvents.cs
- TextLineBreak.cs
- UmAlQuraCalendar.cs
- QuaternionAnimationUsingKeyFrames.cs
- InsufficientMemoryException.cs
- PrivilegeNotHeldException.cs
- InlinedAggregationOperator.cs
- WCFModelStrings.Designer.cs
- ImmutableCollection.cs
- ListViewSelectEventArgs.cs
- Literal.cs
- MediaSystem.cs
- SafeNativeMethods.cs
- IconConverter.cs
- ObjectSecurityT.cs
- TypeHelpers.cs
- ItemChangedEventArgs.cs
- InstanceData.cs
- CapabilitiesRule.cs
- ByteArrayHelperWithString.cs
- DisplayNameAttribute.cs
- nulltextnavigator.cs
- RichTextBox.cs
- ComponentEditorPage.cs
- SamlAssertionKeyIdentifierClause.cs
- AmbientProperties.cs
- ClientCultureInfo.cs
- ComponentResourceKeyConverter.cs
- MethodExecutor.cs
- FixUp.cs
- ExpandSegment.cs
- UpdateExpressionVisitor.cs
- Int32Collection.cs
- SettingsBindableAttribute.cs
- StringArrayEditor.cs
- ElementUtil.cs
- MoveSizeWinEventHandler.cs
- UserCancellationException.cs
- HostingEnvironmentSection.cs
- Cursor.cs
- ByteStream.cs
- RotateTransform3D.cs
- TextLineBreak.cs
- mil_commands.cs
- CreateUserErrorEventArgs.cs
- filewebresponse.cs
- ColorBlend.cs
- FontConverter.cs
- PipelineDeploymentState.cs
- RegionData.cs
- CryptoApi.cs
- AtlasWeb.Designer.cs
- RectangleHotSpot.cs
- ToolStripSeparatorRenderEventArgs.cs
- OracleSqlParser.cs
- QueryCoreOp.cs
- DictionaryMarkupSerializer.cs
- RegexCode.cs
- DefaultTextStore.cs
- RuleConditionDialog.cs
- TextPointerBase.cs
- SafeRightsManagementEnvironmentHandle.cs
- ScrollEvent.cs
- IdnMapping.cs
- CompilerGeneratedAttribute.cs
- MenuItemStyleCollection.cs
- EntityConnectionStringBuilder.cs
- TextBlock.cs
- FontDifferentiator.cs
- InvokeBinder.cs
- followingquery.cs
- PreparingEnlistment.cs