Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- DictionarySectionHandler.cs
- Int64KeyFrameCollection.cs
- MonitoringDescriptionAttribute.cs
- Polyline.cs
- HostProtectionException.cs
- ObjectListCommand.cs
- HttpRawResponse.cs
- WorkflowOperationInvoker.cs
- RTLAwareMessageBox.cs
- LogLogRecordHeader.cs
- ThicknessAnimationUsingKeyFrames.cs
- XmlDataSourceNodeDescriptor.cs
- RemotingConfiguration.cs
- ExtractedStateEntry.cs
- IIS7WorkerRequest.cs
- Filter.cs
- ViewRendering.cs
- Function.cs
- BinaryFormatterWriter.cs
- RegexStringValidator.cs
- DesignOnlyAttribute.cs
- PkcsUtils.cs
- SafeMILHandle.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- DataGridViewBand.cs
- VectorConverter.cs
- MyContact.cs
- SqlCacheDependencyDatabase.cs
- PointConverter.cs
- Base64Encoding.cs
- SharedUtils.cs
- WebEventTraceProvider.cs
- DataGridViewDesigner.cs
- XamlSerializerUtil.cs
- NamespaceCollection.cs
- TransportOutputChannel.cs
- FontFamily.cs
- MemberDescriptor.cs
- prompt.cs
- WorkItem.cs
- TreeNodeEventArgs.cs
- DataGridTableCollection.cs
- FigureParagraph.cs
- DrawingAttributesDefaultValueFactory.cs
- InputBuffer.cs
- DNS.cs
- AgileSafeNativeMemoryHandle.cs
- TextTreeInsertElementUndoUnit.cs
- X509Extension.cs
- RichTextBoxAutomationPeer.cs
- UserControlAutomationPeer.cs
- HotSpotCollection.cs
- PropertyGridCommands.cs
- FloaterBaseParaClient.cs
- FontUnit.cs
- XmlSchemaInferenceException.cs
- IUnknownConstantAttribute.cs
- FixedDocument.cs
- StringFormat.cs
- EntitySqlException.cs
- IisTraceListener.cs
- Rss20ItemFormatter.cs
- Base64Decoder.cs
- dbenumerator.cs
- XhtmlBasicImageAdapter.cs
- ConditionBrowserDialog.cs
- CorrelationManager.cs
- SoapInteropTypes.cs
- PointLight.cs
- ListViewGroupConverter.cs
- ClientSideProviderDescription.cs
- IncrementalCompileAnalyzer.cs
- DrawingGroup.cs
- userdatakeys.cs
- HandlerBase.cs
- ActivityDesignerLayoutSerializers.cs
- SecurityStandardsManager.cs
- Image.cs
- SqlDataSourceStatusEventArgs.cs
- SmtpMail.cs
- MatrixAnimationUsingPath.cs
- xamlnodes.cs
- EventlogProvider.cs
- DataIdProcessor.cs
- Binding.cs
- ContentControl.cs
- xsdvalidator.cs
- PersonalizationAdministration.cs
- Helpers.cs
- ExtensionDataObject.cs
- BuildProvidersCompiler.cs
- WindowsListViewGroup.cs
- CodeNamespace.cs
- RectangleHotSpot.cs
- FillBehavior.cs
- MenuItem.cs
- Line.cs
- SqlException.cs
- XmlAnyElementAttribute.cs
- PopupControlService.cs