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
- XmlDocumentSerializer.cs
- SqlMetaData.cs
- RuleDefinitions.cs
- CapabilitiesRule.cs
- EditorPartCollection.cs
- WebReference.cs
- BoundsDrawingContextWalker.cs
- ToolboxItemCollection.cs
- FacetChecker.cs
- DependencyObject.cs
- TabItemWrapperAutomationPeer.cs
- DefaultValueConverter.cs
- VirtualDirectoryMapping.cs
- SHA256Managed.cs
- ShadowGlyph.cs
- TextSpanModifier.cs
- DependencyObjectProvider.cs
- MediaPlayer.cs
- TreeNodeStyleCollection.cs
- XmlLoader.cs
- VBCodeProvider.cs
- CodeAssignStatement.cs
- RetriableClipboard.cs
- SynchronizedDispatch.cs
- HtmlInputCheckBox.cs
- PngBitmapDecoder.cs
- PlainXmlSerializer.cs
- MenuItemBindingCollection.cs
- Propagator.cs
- InheritedPropertyDescriptor.cs
- GPRECTF.cs
- Column.cs
- COAUTHIDENTITY.cs
- Expr.cs
- Select.cs
- ScriptResourceInfo.cs
- ContractNamespaceAttribute.cs
- CodePrimitiveExpression.cs
- MatcherBuilder.cs
- AttributeQuery.cs
- XPathScanner.cs
- AssemblyResourceLoader.cs
- SQLConvert.cs
- ServiceHandle.cs
- OleDbParameterCollection.cs
- TextServicesCompartmentEventSink.cs
- InvokeMemberBinder.cs
- BaseProcessor.cs
- ViewStateException.cs
- ToolConsole.cs
- TransactionProtocol.cs
- CommonObjectSecurity.cs
- HttpWebResponse.cs
- FlagsAttribute.cs
- DataSourceBooleanViewSchemaConverter.cs
- SerializationObjectManager.cs
- PropertySegmentSerializationProvider.cs
- Link.cs
- cookiecontainer.cs
- SimpleWorkerRequest.cs
- ReliableMessagingHelpers.cs
- QuadraticBezierSegment.cs
- ConstructorBuilder.cs
- BlurEffect.cs
- _ProxyChain.cs
- FileLevelControlBuilderAttribute.cs
- ScrollBar.cs
- ScriptComponentDescriptor.cs
- BuilderInfo.cs
- RotateTransform3D.cs
- BitmapEncoder.cs
- PointF.cs
- XamlInt32CollectionSerializer.cs
- DataSourceUtil.cs
- LocalFileSettingsProvider.cs
- DataGridTextBox.cs
- StretchValidation.cs
- SamlAssertion.cs
- BrushValueSerializer.cs
- PopOutPanel.cs
- DataSetUtil.cs
- HtmlWindow.cs
- ToolboxComponentsCreatingEventArgs.cs
- WinEventTracker.cs
- XmlHierarchyData.cs
- CharacterString.cs
- XmlSchemaInclude.cs
- DateTimeFormatInfoScanner.cs
- CompilerGeneratedAttribute.cs
- MexHttpBindingElement.cs
- UserControlParser.cs
- FreezableCollection.cs
- SafeHandles.cs
- PolyBezierSegment.cs
- FrameworkName.cs
- XmlToDatasetMap.cs
- RbTree.cs
- NodeFunctions.cs
- DescendantQuery.cs
- SafeFileMapViewHandle.cs