Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ChildTable.cs
- OverlappedAsyncResult.cs
- DataRow.cs
- DataTableMappingCollection.cs
- TdsEnums.cs
- Subset.cs
- ComponentEditorForm.cs
- SqlBuilder.cs
- XmlElementList.cs
- ObjectView.cs
- Parser.cs
- InvalidateEvent.cs
- DataGridViewHitTestInfo.cs
- AxisAngleRotation3D.cs
- SynchronizedPool.cs
- ConnectionsZone.cs
- MembershipValidatePasswordEventArgs.cs
- XmlILIndex.cs
- DesigntimeLicenseContext.cs
- SiteMapNodeItem.cs
- TextProperties.cs
- Executor.cs
- TaskExtensions.cs
- NewItemsContextMenuStrip.cs
- MultiTrigger.cs
- SafeEventHandle.cs
- WebConfigurationFileMap.cs
- InternalConfigRoot.cs
- WindowsListViewItemStartMenu.cs
- ConfigurationSectionGroup.cs
- BrushValueSerializer.cs
- DateTimeOffset.cs
- Vector3DConverter.cs
- NegatedCellConstant.cs
- HttpModule.cs
- ExpressionEditorSheet.cs
- __ConsoleStream.cs
- ValidationPropertyAttribute.cs
- Encoding.cs
- TimelineClockCollection.cs
- Exceptions.cs
- EraserBehavior.cs
- PageThemeBuildProvider.cs
- RenderingBiasValidation.cs
- ListViewGroup.cs
- EventPropertyMap.cs
- RelationshipNavigation.cs
- PointHitTestResult.cs
- ReadOnlyHierarchicalDataSource.cs
- GroupItemAutomationPeer.cs
- ErrorRuntimeConfig.cs
- EventLogEntry.cs
- RuntimeConfigLKG.cs
- HtmlUtf8RawTextWriter.cs
- CodePageUtils.cs
- TextAutomationPeer.cs
- SQLResource.cs
- RealizationContext.cs
- PropertyGridCommands.cs
- Token.cs
- IISMapPath.cs
- EmptyStringExpandableObjectConverter.cs
- DeploymentExceptionMapper.cs
- ExpanderAutomationPeer.cs
- AstTree.cs
- SettingsPropertyWrongTypeException.cs
- ProbeMatchesMessage11.cs
- DataGridState.cs
- StrokeCollectionConverter.cs
- DocumentSchemaValidator.cs
- XmlSchemaSimpleContentRestriction.cs
- TextServicesCompartmentContext.cs
- Fx.cs
- Stopwatch.cs
- IteratorDescriptor.cs
- ListViewItemSelectionChangedEvent.cs
- NativeMethodsOther.cs
- DetailsViewModeEventArgs.cs
- RegexWorker.cs
- SynchronizedCollection.cs
- TripleDESCryptoServiceProvider.cs
- XmlDataSourceNodeDescriptor.cs
- webeventbuffer.cs
- StatusBarPanelClickEvent.cs
- DataGridViewRowEventArgs.cs
- PerspectiveCamera.cs
- FieldTemplateFactory.cs
- DataSourceXmlClassAttribute.cs
- ISFTagAndGuidCache.cs
- Propagator.Evaluator.cs
- WizardStepBase.cs
- DocumentPageViewAutomationPeer.cs
- XmlQueryCardinality.cs
- TreeWalker.cs
- PathSegmentCollection.cs
- CompositeControl.cs
- XPathEmptyIterator.cs
- BitmapEffectDrawing.cs
- TypeDescriptionProviderAttribute.cs
- CorruptStoreException.cs