Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / Common / DBAsyncResult.cs / 1305376 / DBAsyncResult.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.Common { using System; using System.Data.ProviderBase; using System.Diagnostics; using System.Threading; internal sealed class DbAsyncResult : IAsyncResult { private readonly AsyncCallback _callback = null; private bool _fCompleted = false; private bool _fCompletedSynchronously = false; private readonly ManualResetEvent _manualResetEvent = null; private object _owner = null; private readonly object _stateObject = null; private readonly string _endMethodName; private ExecutionContext _execContext = null; static private ContextCallback _contextCallback = new ContextCallback(AsyncCallback_Context); // Used for SqlClient Open async private DbConnectionInternal _connectionInternal = null; internal DbAsyncResult(object owner, string endMethodName, AsyncCallback callback, object stateObject, ExecutionContext execContext) { _owner = owner; _endMethodName = endMethodName; _callback = callback; _stateObject = stateObject; _manualResetEvent = new ManualResetEvent(false); _execContext = execContext; } object IAsyncResult.AsyncState { get { return _stateObject; } } WaitHandle IAsyncResult.AsyncWaitHandle { get { return _manualResetEvent; } } bool IAsyncResult.CompletedSynchronously { get { return _fCompletedSynchronously; } } internal DbConnectionInternal ConnectionInternal { get { return _connectionInternal; } set { _connectionInternal = value; } } bool IAsyncResult.IsCompleted { get { return _fCompleted; } } internal string EndMethodName { get { return _endMethodName; } } internal void CompareExchangeOwner(object owner, string method) { object prior = Interlocked.CompareExchange(ref _owner, null, owner); if (prior != owner) { if (null != prior) { throw ADP.IncorrectAsyncResult(); } throw ADP.MethodCalledTwice(method); } } internal void Reset() { _fCompleted = false; _fCompletedSynchronously = false; _manualResetEvent.Reset(); } internal void SetCompleted() { _fCompleted = true; _manualResetEvent.Set(); if (_callback != null) { // QueueUserWorkItem only accepts WaitCallback - which requires a signature of Foo(object state). // Must call function on this object with that signature - and then call user AsyncCallback. // AsyncCallback signature is Foo(IAsyncResult result). ThreadPool.QueueUserWorkItem(new WaitCallback(ExecuteCallback), this); } } internal void SetCompletedSynchronously() { _fCompletedSynchronously = true; } static private void AsyncCallback_Context(Object state) { DbAsyncResult result = (DbAsyncResult) state; if (result._callback != null) { result._callback(result); } } private void ExecuteCallback(object asyncResult) { DbAsyncResult result = (DbAsyncResult) asyncResult; if (null != result._callback) { if (result._execContext != null) { ExecutionContext.Run(result._execContext, DbAsyncResult._contextCallback, result); } else { result._callback(this); } } } } } // 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
- PolicyChain.cs
- TypeSystemProvider.cs
- DataGridTableStyleMappingNameEditor.cs
- DetailsViewDeletedEventArgs.cs
- CodeValidator.cs
- DataGridViewRowConverter.cs
- GridPatternIdentifiers.cs
- PairComparer.cs
- TextFormatterContext.cs
- TypeDelegator.cs
- UserMapPath.cs
- SafeEventLogWriteHandle.cs
- SqlFunctionAttribute.cs
- UnsafeNativeMethods.cs
- HttpValueCollection.cs
- PrtCap_Public_Simple.cs
- NameValueConfigurationCollection.cs
- StringExpressionSet.cs
- HopperCache.cs
- KeyConstraint.cs
- ContextMenuStrip.cs
- ScriptingProfileServiceSection.cs
- XhtmlConformanceSection.cs
- ListBindableAttribute.cs
- UIElementPropertyUndoUnit.cs
- FocusChangedEventArgs.cs
- NodeFunctions.cs
- XmlRawWriter.cs
- MimeWriter.cs
- Track.cs
- Site.cs
- RegexFCD.cs
- WebPartRestoreVerb.cs
- TokenBasedSet.cs
- OdbcConnectionStringbuilder.cs
- NameValuePermission.cs
- GridItemCollection.cs
- FontCacheUtil.cs
- DatasetMethodGenerator.cs
- XsltLibrary.cs
- GC.cs
- DeclaredTypeElementCollection.cs
- XmlDataCollection.cs
- Int32Rect.cs
- StaticExtension.cs
- XmlHierarchicalDataSourceView.cs
- PolyQuadraticBezierSegment.cs
- CodeTypeDeclarationCollection.cs
- XmlSchemaNotation.cs
- MissingMethodException.cs
- ScriptReference.cs
- SurrogateDataContract.cs
- WinCategoryAttribute.cs
- Button.cs
- CatalogPartChrome.cs
- Visual3D.cs
- LogicalTreeHelper.cs
- Label.cs
- Signature.cs
- CriticalFinalizerObject.cs
- DelayedRegex.cs
- FileChangesMonitor.cs
- DoubleAnimation.cs
- XmlSchemaAnnotation.cs
- ValidationRuleCollection.cs
- DecimalFormatter.cs
- ReadOnlyHierarchicalDataSourceView.cs
- InputChannel.cs
- MultiplexingFormatMapping.cs
- X509SubjectKeyIdentifierClause.cs
- UIElementCollection.cs
- Point4DConverter.cs
- HttpProfileGroupBase.cs
- ConfigurationSettings.cs
- ControlUtil.cs
- _NestedSingleAsyncResult.cs
- AttachedPropertyMethodSelector.cs
- RuleRefElement.cs
- WaitHandleCannotBeOpenedException.cs
- Brush.cs
- SerializableTypeCodeDomSerializer.cs
- NeedSkipTokenVisitor.cs
- TemplatedEditableDesignerRegion.cs
- SessionEndingEventArgs.cs
- COAUTHINFO.cs
- ProcessInputEventArgs.cs
- ValueOfAction.cs
- WebPartCatalogCloseVerb.cs
- PieceDirectory.cs
- ContainerControl.cs
- TreeNodeSelectionProcessor.cs
- XhtmlBasicLabelAdapter.cs
- UserNamePasswordValidator.cs
- SizeChangedInfo.cs
- ProtectedConfiguration.cs
- SetStoryboardSpeedRatio.cs
- TextModifierScope.cs
- FixedSOMSemanticBox.cs
- ResourceDisplayNameAttribute.cs
- Byte.cs