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
- SqlTriggerContext.cs
- PermissionRequestEvidence.cs
- UnsafeNativeMethods.cs
- Image.cs
- SafeFileMappingHandle.cs
- InstanceData.cs
- XamlPathDataSerializer.cs
- XsdDataContractExporter.cs
- ModuleBuilder.cs
- Parser.cs
- KnownTypes.cs
- FileInfo.cs
- DoubleLinkListEnumerator.cs
- SystemIcmpV4Statistics.cs
- DataGridViewCellValueEventArgs.cs
- SmiContextFactory.cs
- VersionedStreamOwner.cs
- SingleResultAttribute.cs
- StandardBindingReliableSessionElement.cs
- RtfControlWordInfo.cs
- DesignTable.cs
- ContainerControlDesigner.cs
- ApplicationException.cs
- XmlILIndex.cs
- TcpPortSharing.cs
- BasicSecurityProfileVersion.cs
- DeclarationUpdate.cs
- SelectionHighlightInfo.cs
- XPathExpr.cs
- ClientSettings.cs
- Int32Collection.cs
- BaseUriHelper.cs
- TimeSpanValidator.cs
- ToolStripScrollButton.cs
- EpmContentDeSerializer.cs
- FileStream.cs
- XmlSchemaValidationException.cs
- RowParagraph.cs
- Rules.cs
- ObjectParameterCollection.cs
- FrameworkElementFactoryMarkupObject.cs
- WorkerRequest.cs
- PartitionedStreamMerger.cs
- TreeBuilder.cs
- ToolBarPanel.cs
- RegexRunnerFactory.cs
- ElementHost.cs
- EncodingStreamWrapper.cs
- FontFaceLayoutInfo.cs
- ClientApiGenerator.cs
- DesignerToolboxInfo.cs
- XmlArrayAttribute.cs
- Dump.cs
- CursorConverter.cs
- SqlClientPermission.cs
- TextModifierScope.cs
- ValueHandle.cs
- GridErrorDlg.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- BitStack.cs
- WizardForm.cs
- WinEventHandler.cs
- WindowsFormsSectionHandler.cs
- SchemaInfo.cs
- SiteMapNodeCollection.cs
- TemplateBindingExtension.cs
- XmlQueryCardinality.cs
- SegmentTree.cs
- ListViewGroupConverter.cs
- WebPartVerb.cs
- SqlNodeAnnotations.cs
- HtmlEncodedRawTextWriter.cs
- FileLogRecordHeader.cs
- DocumentScope.cs
- IApplicationTrustManager.cs
- SQLConvert.cs
- DataBindingHandlerAttribute.cs
- XmlTypeMapping.cs
- cryptoapiTransform.cs
- Ref.cs
- ClockGroup.cs
- ToolStripItemEventArgs.cs
- UnknownExceptionActionHelper.cs
- DataGridViewElement.cs
- RelationshipConverter.cs
- LayoutTable.cs
- DataGridViewRowHeaderCell.cs
- ListMarkerLine.cs
- ConfigXmlText.cs
- RtfToXamlReader.cs
- DataBoundControlAdapter.cs
- SortedDictionary.cs
- ResourcesBuildProvider.cs
- Html32TextWriter.cs
- EnterpriseServicesHelper.cs
- ButtonBaseAdapter.cs
- MessagePropertyDescriptionCollection.cs
- QualifierSet.cs
- MembershipPasswordException.cs
- SolidColorBrush.cs