Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Data / DefaultAsyncDataDispatcher.cs / 1305600 / 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.IsCriticalApplicationException(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.IsCriticalApplicationException(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
- ContainerAction.cs
- Blend.cs
- IPGlobalProperties.cs
- XamlSerializationHelper.cs
- DataRowCollection.cs
- WebServiceClientProxyGenerator.cs
- Tile.cs
- BaseAppDomainProtocolHandler.cs
- ConnectionManagementSection.cs
- sqlnorm.cs
- SignedXmlDebugLog.cs
- GenerateScriptTypeAttribute.cs
- MenuTracker.cs
- RoutedEvent.cs
- ClientConfigurationSystem.cs
- WSDualHttpBinding.cs
- BooleanConverter.cs
- DeclarativeCatalogPart.cs
- WebPartCatalogAddVerb.cs
- COM2IProvidePropertyBuilderHandler.cs
- SafePipeHandle.cs
- SettingsProviderCollection.cs
- VersionedStreamOwner.cs
- DbCommandDefinition.cs
- ComponentResourceKey.cs
- XPathAncestorQuery.cs
- FunctionMappingTranslator.cs
- MemberRelationshipService.cs
- RepeatInfo.cs
- Grid.cs
- LinkedResource.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- CodeDesigner.cs
- OptimalBreakSession.cs
- dataobject.cs
- TableLayoutStyle.cs
- PermissionRequestEvidence.cs
- SafeNativeMethodsOther.cs
- Enum.cs
- MruCache.cs
- ListenerConnectionModeReader.cs
- AuthenticationSection.cs
- GeneralTransform3DTo2DTo3D.cs
- ComboBoxDesigner.cs
- CanExecuteRoutedEventArgs.cs
- XmlQueryStaticData.cs
- TakeQueryOptionExpression.cs
- StatusStrip.cs
- ExpressionBuilderCollection.cs
- ItemCollection.cs
- WebPartConnectionsEventArgs.cs
- TreeNodeEventArgs.cs
- ChunkedMemoryStream.cs
- CompatibleComparer.cs
- RangeContentEnumerator.cs
- TracingConnection.cs
- GB18030Encoding.cs
- SapiRecoContext.cs
- HostingPreferredMapPath.cs
- Events.cs
- Calendar.cs
- PolyQuadraticBezierSegment.cs
- LogStore.cs
- AlphabeticalEnumConverter.cs
- Label.cs
- RequestSecurityTokenResponse.cs
- LiteralText.cs
- wgx_exports.cs
- newinstructionaction.cs
- xdrvalidator.cs
- ConnectionsZoneAutoFormat.cs
- BrowserDefinition.cs
- PublisherMembershipCondition.cs
- SqlError.cs
- CompilationRelaxations.cs
- DataSourceCacheDurationConverter.cs
- CancellationToken.cs
- EpmContentDeSerializer.cs
- RuntimeConfigLKG.cs
- InputBinding.cs
- ExpressionEditorAttribute.cs
- CompilationSection.cs
- ConfigurationValidatorBase.cs
- DockPanel.cs
- ApplicationCommands.cs
- EventLogPermission.cs
- GridViewRowEventArgs.cs
- WebPartConnectVerb.cs
- PerformanceCountersElement.cs
- AssociationTypeEmitter.cs
- SaveFileDialog.cs
- PageParserFilter.cs
- ASCIIEncoding.cs
- _LocalDataStore.cs
- AncestorChangedEventArgs.cs
- SafeSecurityHelper.cs
- UnsafeNativeMethods.cs
- ElementMarkupObject.cs
- DocumentSequenceHighlightLayer.cs
- RestHandlerFactory.cs