Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- GenericAuthenticationEventArgs.cs
- OperationResponse.cs
- BaseWebProxyFinder.cs
- FeatureSupport.cs
- SafeJobHandle.cs
- InternalPermissions.cs
- RectangleGeometry.cs
- TemplatedWizardStep.cs
- PtsHost.cs
- FixedTextSelectionProcessor.cs
- ParseHttpDate.cs
- SafeNativeMemoryHandle.cs
- DesignerProperties.cs
- GridItemCollection.cs
- DataAdapter.cs
- ActivityLocationReferenceEnvironment.cs
- XmlReflectionMember.cs
- DoubleLink.cs
- TextEditorTables.cs
- EntitySetBaseCollection.cs
- RemoteHelper.cs
- CultureInfo.cs
- DesignOnlyAttribute.cs
- translator.cs
- XmlDictionaryReader.cs
- TabControlEvent.cs
- XmlElementCollection.cs
- XhtmlBasicTextBoxAdapter.cs
- LayoutTableCell.cs
- Int16.cs
- SecurityElement.cs
- BooleanFacetDescriptionElement.cs
- SplineKeyFrames.cs
- ResolveCriteria11.cs
- DBConcurrencyException.cs
- UserControlParser.cs
- SortedDictionary.cs
- AttributeUsageAttribute.cs
- ContentType.cs
- Frame.cs
- Currency.cs
- PublishLicense.cs
- ExcludePathInfo.cs
- ObjectContextServiceProvider.cs
- NameSpaceEvent.cs
- ListViewGroup.cs
- XmlSchemaAny.cs
- CssStyleCollection.cs
- ChannelRequirements.cs
- XmlArrayAttribute.cs
- FullTrustAssembliesSection.cs
- BaseProcessProtocolHandler.cs
- NavigationProgressEventArgs.cs
- MenuCommand.cs
- CatalogPartCollection.cs
- FontDifferentiator.cs
- EncoderParameters.cs
- ChangePasswordDesigner.cs
- InvariantComparer.cs
- TypeGeneratedEventArgs.cs
- ShaperBuffers.cs
- DataGrid.cs
- BasePattern.cs
- StaticDataManager.cs
- CommonProperties.cs
- Bitmap.cs
- MultiBindingExpression.cs
- WebPartConnection.cs
- ExtensionSimplifierMarkupObject.cs
- CombinedGeometry.cs
- Helpers.cs
- ZipQueryOperator.cs
- EntityDataSourceWizardForm.cs
- CheckBoxFlatAdapter.cs
- AbandonedMutexException.cs
- DataSysAttribute.cs
- ObjectQueryExecutionPlan.cs
- PermissionToken.cs
- ConstraintEnumerator.cs
- MappedMetaModel.cs
- TargetConverter.cs
- entityreference_tresulttype.cs
- MetadataPropertyvalue.cs
- HitTestFilterBehavior.cs
- TabControlToolboxItem.cs
- ImageMetadata.cs
- InheritedPropertyDescriptor.cs
- WebEvents.cs
- CommandExpr.cs
- RewritingPass.cs
- RawKeyboardInputReport.cs
- QueryConverter.cs
- CqlBlock.cs
- HttpHeaderCollection.cs
- Cursors.cs
- RecordManager.cs
- PrimitiveCodeDomSerializer.cs
- QilPatternVisitor.cs
- SafeTokenHandle.cs
- ActiveXHelper.cs