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
- CommandField.cs
- RoutedEventHandlerInfo.cs
- ResourceReferenceExpression.cs
- StreamReader.cs
- WMIInterop.cs
- ObjectItemNoOpAssemblyLoader.cs
- BitmapCacheBrush.cs
- RuleSettings.cs
- FixedTextBuilder.cs
- DataGridViewControlCollection.cs
- ByteFacetDescriptionElement.cs
- iisPickupDirectory.cs
- MetadataArtifactLoaderCompositeFile.cs
- OleDbTransaction.cs
- CssClassPropertyAttribute.cs
- ContextStack.cs
- MinMaxParagraphWidth.cs
- OperationFormatter.cs
- GridView.cs
- Array.cs
- SoapParser.cs
- FixedDocumentPaginator.cs
- DataQuery.cs
- MethodSignatureGenerator.cs
- Style.cs
- SHA256.cs
- Matrix3DValueSerializer.cs
- DesignTable.cs
- Triangle.cs
- PageCatalogPart.cs
- SqlProcedureAttribute.cs
- DeferredTextReference.cs
- EntityConnectionStringBuilder.cs
- SchemeSettingElement.cs
- BindingSource.cs
- COM2AboutBoxPropertyDescriptor.cs
- ExpressionLexer.cs
- RemotingConfiguration.cs
- ZipIOModeEnforcingStream.cs
- SystemWebSectionGroup.cs
- MethodBody.cs
- HashHelper.cs
- WmlImageAdapter.cs
- TreeNodeSelectionProcessor.cs
- EntityModelBuildProvider.cs
- HtmlInputControl.cs
- QilPatternFactory.cs
- DataSetViewSchema.cs
- XmlSerializationWriter.cs
- QueryableFilterUserControl.cs
- CheckBoxList.cs
- mediaeventargs.cs
- PreProcessInputEventArgs.cs
- GroupBox.cs
- WebPartConnection.cs
- DisplayInformation.cs
- MessageSecurityOverHttp.cs
- RegexWriter.cs
- FileReservationCollection.cs
- Menu.cs
- ComplexLine.cs
- SEHException.cs
- ChannelManagerBase.cs
- HierarchicalDataTemplate.cs
- ObjectQueryExecutionPlan.cs
- XmlSchemaAny.cs
- X509ClientCertificateAuthenticationElement.cs
- Attachment.cs
- AnnotationComponentManager.cs
- ResumeStoryboard.cs
- Tokenizer.cs
- TabControlAutomationPeer.cs
- SharedDp.cs
- Main.cs
- TemplateColumn.cs
- BulletedList.cs
- PropertySourceInfo.cs
- TrackBarRenderer.cs
- xsdvalidator.cs
- UnaryNode.cs
- HtmlContainerControl.cs
- Encoder.cs
- XmlSchemaAttributeGroupRef.cs
- DataTableReader.cs
- SafeMILHandle.cs
- TemplateLookupAction.cs
- TdsEnums.cs
- ToolboxSnapDragDropEventArgs.cs
- WhitespaceReader.cs
- BaseCodeDomTreeGenerator.cs
- ObjectViewFactory.cs
- TickBar.cs
- AutomationElementIdentifiers.cs
- Message.cs
- CodeMemberField.cs
- ToolStripArrowRenderEventArgs.cs
- SelectorAutomationPeer.cs
- HighlightComponent.cs
- ExpressionConverter.cs
- ITextView.cs