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
- figurelengthconverter.cs
- PrimitiveCodeDomSerializer.cs
- EmbeddedMailObject.cs
- GcSettings.cs
- BrushConverter.cs
- AutomationElementIdentifiers.cs
- XmlEncodedRawTextWriter.cs
- ReaderWriterLock.cs
- ApplicationInfo.cs
- FontDriver.cs
- JulianCalendar.cs
- SizeAnimationClockResource.cs
- Single.cs
- DataGridViewTextBoxCell.cs
- FileNotFoundException.cs
- ValidationErrorEventArgs.cs
- SharedPerformanceCounter.cs
- Propagator.cs
- XmlSerializerAssemblyAttribute.cs
- ProxyHelper.cs
- ClientRuntimeConfig.cs
- ToolZone.cs
- KeyFrames.cs
- Parameter.cs
- DesignerDeviceConfig.cs
- ReadOnlyHierarchicalDataSource.cs
- SplashScreen.cs
- JsonReader.cs
- SizeF.cs
- HandleCollector.cs
- Wizard.cs
- ItemsChangedEventArgs.cs
- MTConfigUtil.cs
- WhitespaceRule.cs
- Content.cs
- CountAggregationOperator.cs
- WebUtil.cs
- DeclaredTypeValidatorAttribute.cs
- RelationshipType.cs
- DataGridTableCollection.cs
- DataGridLinkButton.cs
- PiiTraceSource.cs
- DependencyObject.cs
- MSAAWinEventWrap.cs
- CodeExpressionCollection.cs
- Msec.cs
- MarshalByRefObject.cs
- TabletDevice.cs
- OracleDataReader.cs
- WebServiceHostFactory.cs
- ExpressionNode.cs
- TreeNodeCollection.cs
- ButtonBaseAutomationPeer.cs
- DataContractSerializer.cs
- HostingEnvironmentException.cs
- GlobalizationSection.cs
- CallContext.cs
- DataTemplate.cs
- ErrorHandler.cs
- ClientScriptManagerWrapper.cs
- InteropBitmapSource.cs
- RtfControlWordInfo.cs
- PersonalizableTypeEntry.cs
- AttributeCollection.cs
- DateTimeAutomationPeer.cs
- PartitionedDataSource.cs
- ComponentEvent.cs
- SystemColors.cs
- diagnosticsswitches.cs
- TemplateNameScope.cs
- AssemblyUtil.cs
- ToolboxItemSnapLineBehavior.cs
- FileUtil.cs
- AppDomainFactory.cs
- Image.cs
- Emitter.cs
- XmlSchemaInclude.cs
- ConnectionOrientedTransportChannelFactory.cs
- UnSafeCharBuffer.cs
- EpmTargetPathSegment.cs
- SessionStateItemCollection.cs
- AffineTransform3D.cs
- NavigationFailedEventArgs.cs
- GPPOINT.cs
- UInt64Converter.cs
- JsonFormatWriterGenerator.cs
- ComponentEditorPage.cs
- CompiledQuery.cs
- HttpResponseInternalBase.cs
- SelfIssuedAuthRSACryptoProvider.cs
- SrgsRuleRef.cs
- ProfileServiceManager.cs
- PropertiesTab.cs
- RoutedEventArgs.cs
- StrongName.cs
- InputProviderSite.cs
- RectAnimationUsingKeyFrames.cs
- SplayTreeNode.cs
- TypeUsageBuilder.cs
- ExceptionHelpers.cs