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
- DesignerVerbCollection.cs
- Rectangle.cs
- TextServicesCompartmentEventSink.cs
- ResourceCategoryAttribute.cs
- ViewCellRelation.cs
- ProfileGroupSettingsCollection.cs
- OdbcConnectionString.cs
- Evidence.cs
- RadioButtonRenderer.cs
- ArgumentNullException.cs
- PathGradientBrush.cs
- DataGridTablesFactory.cs
- Parser.cs
- Cloud.cs
- OutputWindow.cs
- RemotingServices.cs
- ThemeDirectoryCompiler.cs
- XhtmlBasicPanelAdapter.cs
- IdentifierService.cs
- EnterpriseServicesHelper.cs
- CodeArrayIndexerExpression.cs
- MarkerProperties.cs
- DataGridViewRowPostPaintEventArgs.cs
- BamlRecordHelper.cs
- XmlSignatureProperties.cs
- CodeAttributeArgumentCollection.cs
- ObjectDataSourceDesigner.cs
- FamilyMapCollection.cs
- DivideByZeroException.cs
- JsonStringDataContract.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- MetaChildrenColumn.cs
- ContentFilePart.cs
- ArraySortHelper.cs
- Italic.cs
- SHA512.cs
- ToolStripStatusLabel.cs
- QueryPageSettingsEventArgs.cs
- Error.cs
- ConfigXmlElement.cs
- PenCursorManager.cs
- FormClosedEvent.cs
- _IPv4Address.cs
- EmptyEnumerable.cs
- DrawingGroup.cs
- TypeForwardedToAttribute.cs
- CompositeActivityTypeDescriptorProvider.cs
- WindowsListView.cs
- LineGeometry.cs
- PriorityBinding.cs
- WebPartConnectionsDisconnectVerb.cs
- TextRangeEdit.cs
- CompiledQuery.cs
- SecurityBindingElementImporter.cs
- TranslateTransform3D.cs
- SystemColorTracker.cs
- NotifyCollectionChangedEventArgs.cs
- Separator.cs
- TextEditorThreadLocalStore.cs
- GeneralTransform2DTo3D.cs
- TypeInitializationException.cs
- ContextActivityUtils.cs
- EdmConstants.cs
- RecognitionResult.cs
- XmlElementAttribute.cs
- DnsEndPoint.cs
- AlphaSortedEnumConverter.cs
- BitStream.cs
- FileSystemEventArgs.cs
- ChannelProtectionRequirements.cs
- XmlTextReaderImpl.cs
- SystemMulticastIPAddressInformation.cs
- InheritanceAttribute.cs
- UnsafeNativeMethods.cs
- StoragePropertyMapping.cs
- OleDbParameter.cs
- ClaimSet.cs
- ValueHandle.cs
- IdentifierService.cs
- SingleResultAttribute.cs
- FontStyles.cs
- AssignDesigner.xaml.cs
- CatalogPartCollection.cs
- SafeHandle.cs
- SessionSwitchEventArgs.cs
- NotificationContext.cs
- FeatureAttribute.cs
- NetStream.cs
- HorizontalAlignConverter.cs
- XsdValidatingReader.cs
- FreeFormDragDropManager.cs
- HMACSHA1.cs
- PerformanceCounterScope.cs
- ConstraintCollection.cs
- XmlC14NWriter.cs
- Preprocessor.cs
- TrackingSection.cs
- ModifierKeysValueSerializer.cs
- util.cs
- Publisher.cs