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
- ExceptionRoutedEventArgs.cs
- RegexBoyerMoore.cs
- WaitHandleCannotBeOpenedException.cs
- SimpleType.cs
- _NtlmClient.cs
- EncoderNLS.cs
- OrderedDictionaryStateHelper.cs
- AnnotationHighlightLayer.cs
- DuplicateContext.cs
- Privilege.cs
- SqlGatherProducedAliases.cs
- OleDbPropertySetGuid.cs
- CustomCategoryAttribute.cs
- BindingValueChangedEventArgs.cs
- DocumentXPathNavigator.cs
- Win32PrintDialog.cs
- DayRenderEvent.cs
- PermissionSet.cs
- Trace.cs
- sapiproxy.cs
- Nodes.cs
- SystemUdpStatistics.cs
- EditBehavior.cs
- BitmapVisualManager.cs
- TreeNodeConverter.cs
- MarkupExtensionParser.cs
- ParameterRefs.cs
- SafeFreeMibTable.cs
- SimpleHandlerFactory.cs
- NativeMethods.cs
- XmlChoiceIdentifierAttribute.cs
- EntityDataSourceEntitySetNameItem.cs
- OdbcConnectionString.cs
- AssociatedControlConverter.cs
- XsltInput.cs
- SignedXml.cs
- CustomSignedXml.cs
- ItemsChangedEventArgs.cs
- ViewGenResults.cs
- SerializationEventsCache.cs
- ServiceElementCollection.cs
- SessionStateSection.cs
- DbProviderSpecificTypePropertyAttribute.cs
- ArrangedElement.cs
- EntityDataSourceViewSchema.cs
- DataGridCaption.cs
- SetUserLanguageRequest.cs
- SoapEnumAttribute.cs
- Mappings.cs
- NameScopePropertyAttribute.cs
- KerberosRequestorSecurityToken.cs
- TextRunTypographyProperties.cs
- TdsParserHelperClasses.cs
- SeparatorAutomationPeer.cs
- TypeConverters.cs
- Constraint.cs
- IIS7UserPrincipal.cs
- PathGeometry.cs
- XPathPatternBuilder.cs
- RegexEditorDialog.cs
- RandomNumberGenerator.cs
- SignedXml.cs
- TraceXPathNavigator.cs
- GlobalProxySelection.cs
- HiddenField.cs
- BindingValueChangedEventArgs.cs
- WebHttpBindingElement.cs
- DefinitionBase.cs
- IisTraceListener.cs
- RTLAwareMessageBox.cs
- Matrix3DConverter.cs
- AccessKeyManager.cs
- EventBuilder.cs
- GenericUI.cs
- XPathChildIterator.cs
- DirtyTextRange.cs
- SequenceFullException.cs
- TreeNodeEventArgs.cs
- EventWaitHandleSecurity.cs
- RichTextBoxAutomationPeer.cs
- DataGridRowDetailsEventArgs.cs
- Interlocked.cs
- ObjectAssociationEndMapping.cs
- Polyline.cs
- PropertyInfoSet.cs
- HashRepartitionStream.cs
- SuppressMergeCheckAttribute.cs
- CounterSetInstance.cs
- Publisher.cs
- VirtualDirectoryMapping.cs
- Misc.cs
- OutKeywords.cs
- ContainerParaClient.cs
- CollectionChangedEventManager.cs
- TextTreeTextBlock.cs
- DataFormats.cs
- DataError.cs
- MatrixAnimationUsingPath.cs
- VideoDrawing.cs
- BoundPropertyEntry.cs