Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Internal / Data / DefaultAsyncDataDispatcher.cs / 1 / DefaultAsyncDataDispatcher.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Default async scheduler for data operations. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Threading; using System.Windows; using System.Windows.Data; using MS.Internal; namespace MS.Internal.Data { internal class DefaultAsyncDataDispatcher : IAsyncDataDispatcher { //----------------------------------------------------- // // Interface: IAsyncDataDispatcher // //----------------------------------------------------- ///Add a request to the dispatcher's queue void IAsyncDataDispatcher.AddRequest(AsyncDataRequest request) { lock (_list.SyncRoot) { _list.Add(request); } ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessRequest), request); } ///Cancel all requests in the dispatcher's queue void IAsyncDataDispatcher.CancelAllRequests() { lock (_list.SyncRoot) { for (int i=0; i<_list.Count; ++i) { AsyncDataRequest request = (AsyncDataRequest)_list[i]; request.Cancel(); } _list.Clear(); } } //------------------------------------------------------ // // Private methods // //----------------------------------------------------- // Run a single request. This method gets scheduled on a worker thread // from the process ThreadPool. void ProcessRequest(object o) { AsyncDataRequest request = (AsyncDataRequest)o; // PreSharp uses message numbers that the C# compiler doesn't know about. // Disable the C# complaints, per the PreSharp documentation. #pragma warning disable 1634, 1691 // PreSharp complains about catching NullReference (and other) exceptions. // In this case, these are precisely the ones we want to catch the most, // so that a failure on a worker thread doesn't affect the main thread. #pragma warning disable 56500 // run the request - this may take a while try { request.Complete(request.DoWork()); } // Catch all exceptions. There is no app code on the stack, // so the exception isn't actionable by the app. // Yet we don't want to crash the app. catch (Exception ex) { if (CriticalExceptions.IsCriticalException(ex)) throw; request.Fail(ex); } catch // non CLS compliant exception { request.Fail(new InvalidOperationException(SR.Get(SRID.NonCLSException, "processing an async data request"))); } #pragma warning restore 56500 #pragma warning restore 1634, 1691 // remove the request from the list lock (_list.SyncRoot) { _list.Remove(request); } } //------------------------------------------------------ // // Private data // //------------------------------------------------------ ArrayList _list = new ArrayList(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Default async scheduler for data operations. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Threading; using System.Windows; using System.Windows.Data; using MS.Internal; namespace MS.Internal.Data { internal class DefaultAsyncDataDispatcher : IAsyncDataDispatcher { //----------------------------------------------------- // // Interface: IAsyncDataDispatcher // //----------------------------------------------------- ///Add a request to the dispatcher's queue void IAsyncDataDispatcher.AddRequest(AsyncDataRequest request) { lock (_list.SyncRoot) { _list.Add(request); } ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessRequest), request); } ///Cancel all requests in the dispatcher's queue void IAsyncDataDispatcher.CancelAllRequests() { lock (_list.SyncRoot) { for (int i=0; i<_list.Count; ++i) { AsyncDataRequest request = (AsyncDataRequest)_list[i]; request.Cancel(); } _list.Clear(); } } //------------------------------------------------------ // // Private methods // //----------------------------------------------------- // Run a single request. This method gets scheduled on a worker thread // from the process ThreadPool. void ProcessRequest(object o) { AsyncDataRequest request = (AsyncDataRequest)o; // PreSharp uses message numbers that the C# compiler doesn't know about. // Disable the C# complaints, per the PreSharp documentation. #pragma warning disable 1634, 1691 // PreSharp complains about catching NullReference (and other) exceptions. // In this case, these are precisely the ones we want to catch the most, // so that a failure on a worker thread doesn't affect the main thread. #pragma warning disable 56500 // run the request - this may take a while try { request.Complete(request.DoWork()); } // Catch all exceptions. There is no app code on the stack, // so the exception isn't actionable by the app. // Yet we don't want to crash the app. catch (Exception ex) { if (CriticalExceptions.IsCriticalException(ex)) throw; request.Fail(ex); } catch // non CLS compliant exception { request.Fail(new InvalidOperationException(SR.Get(SRID.NonCLSException, "processing an async data request"))); } #pragma warning restore 56500 #pragma warning restore 1634, 1691 // remove the request from the list lock (_list.SyncRoot) { _list.Remove(request); } } //------------------------------------------------------ // // Private data // //------------------------------------------------------ ArrayList _list = new ArrayList(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ISessionStateStore.cs
- Socket.cs
- UnknownBitmapEncoder.cs
- SqlGatherConsumedAliases.cs
- CompressEmulationStream.cs
- SizeAnimation.cs
- MappingModelBuildProvider.cs
- HttpConfigurationSystem.cs
- errorpatternmatcher.cs
- RegionIterator.cs
- ContentDisposition.cs
- DragEvent.cs
- WindowsPen.cs
- ClientBuildManagerCallback.cs
- PathFigureCollectionConverter.cs
- HTTPNotFoundHandler.cs
- httpserverutility.cs
- MailMessage.cs
- InputScopeManager.cs
- SchemaTypeEmitter.cs
- WmlListAdapter.cs
- ScrollViewer.cs
- EventSinkHelperWriter.cs
- EntityDescriptor.cs
- TreeNodeEventArgs.cs
- StrongNameKeyPair.cs
- SatelliteContractVersionAttribute.cs
- UserUseLicenseDictionaryLoader.cs
- WorkflowDefinitionContext.cs
- AssociationSetMetadata.cs
- ArgIterator.cs
- COM2Enum.cs
- LogLogRecordEnumerator.cs
- ConstructorBuilder.cs
- WebBrowserProgressChangedEventHandler.cs
- ProfilePropertyMetadata.cs
- ListViewSortEventArgs.cs
- FormViewDesigner.cs
- XmlWrappingReader.cs
- KeyFrames.cs
- LinkedResource.cs
- XmlSchema.cs
- BridgeDataRecord.cs
- DesignerActionKeyboardBehavior.cs
- SelectorItemAutomationPeer.cs
- BaseProcessor.cs
- DropShadowBitmapEffect.cs
- WindowsListViewItemStartMenu.cs
- SQLResource.cs
- MarkupWriter.cs
- SimpleNameService.cs
- HMACRIPEMD160.cs
- Scheduling.cs
- ForEachAction.cs
- WindowHideOrCloseTracker.cs
- ComponentChangedEvent.cs
- ObjectStorage.cs
- PropertyInformation.cs
- EventMap.cs
- SafeRightsManagementHandle.cs
- AppDomainAttributes.cs
- StateManagedCollection.cs
- GenericNameHandler.cs
- MultiSelectRootGridEntry.cs
- DropShadowBitmapEffect.cs
- GZipUtils.cs
- Math.cs
- TransportListener.cs
- SpStreamWrapper.cs
- PageEventArgs.cs
- BinaryObjectReader.cs
- ActivatedMessageQueue.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- Group.cs
- RandomNumberGenerator.cs
- ACL.cs
- WorkflowCompensationBehavior.cs
- ColumnWidthChangingEvent.cs
- BaseTemplateBuildProvider.cs
- PixelFormatConverter.cs
- DataRowExtensions.cs
- XmlCountingReader.cs
- Adorner.cs
- TextProperties.cs
- HtmlWindowCollection.cs
- XPathNodeIterator.cs
- CodeDirectoryCompiler.cs
- HtmlShimManager.cs
- FilteredXmlReader.cs
- mda.cs
- ParserHooks.cs
- ToolBarButton.cs
- Variant.cs
- Container.cs
- CustomValidator.cs
- DataObjectAttribute.cs
- VectorAnimation.cs
- Page.cs
- BatchServiceHost.cs
- InitializingNewItemEventArgs.cs