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
- XmlAttribute.cs
- Win32SafeHandles.cs
- BrowserCapabilitiesCodeGenerator.cs
- SoapTypeAttribute.cs
- RuntimeComponentFilter.cs
- BuilderPropertyEntry.cs
- Point3DCollection.cs
- TrimSurroundingWhitespaceAttribute.cs
- NumericUpDown.cs
- ManagedWndProcTracker.cs
- WindowsFormsHostAutomationPeer.cs
- FrameworkContentElementAutomationPeer.cs
- XsltContext.cs
- DataPagerField.cs
- FontCacheUtil.cs
- ButtonBaseAdapter.cs
- ServicesUtilities.cs
- CreateUserWizard.cs
- CheckBox.cs
- CancelEventArgs.cs
- ImpersonationContext.cs
- SapiAttributeParser.cs
- FormViewRow.cs
- DelegateInArgument.cs
- dataobject.cs
- StringConcat.cs
- XhtmlConformanceSection.cs
- NavigationHelper.cs
- OrthographicCamera.cs
- PrintDialog.cs
- ControlIdConverter.cs
- ObjectStateFormatter.cs
- ImageFormat.cs
- UriTemplateTrieNode.cs
- NetworkAddressChange.cs
- GridViewRow.cs
- SQLUtility.cs
- TripleDES.cs
- EntityProxyFactory.cs
- TransformerInfoCollection.cs
- MULTI_QI.cs
- KnownIds.cs
- Pair.cs
- WizardStepBase.cs
- EditorZoneBase.cs
- XpsSerializerWriter.cs
- WinEventQueueItem.cs
- RegexMatch.cs
- FontSizeConverter.cs
- InputScope.cs
- XPathNodeList.cs
- XmlNodeList.cs
- ProfessionalColorTable.cs
- List.cs
- TreeNodeStyleCollection.cs
- DebugView.cs
- HandlerBase.cs
- InputBindingCollection.cs
- WorkflowInstance.cs
- OpCellTreeNode.cs
- BitmapCodecInfo.cs
- AspCompat.cs
- BuildProvidersCompiler.cs
- ConfigXmlComment.cs
- DESCryptoServiceProvider.cs
- SHA384Managed.cs
- BufferedResponseStream.cs
- SoapIgnoreAttribute.cs
- GeneralTransform3D.cs
- TextServicesCompartment.cs
- TimeSpanConverter.cs
- _ConnectionGroup.cs
- DictionaryKeyPropertyAttribute.cs
- CopyNodeSetAction.cs
- ToolStripContainerDesigner.cs
- CompositeScriptReferenceEventArgs.cs
- Variable.cs
- FloaterParagraph.cs
- Accessible.cs
- Queue.cs
- AssemblyBuilder.cs
- StandardBindingElement.cs
- SortedList.cs
- SystemResources.cs
- SignedInfo.cs
- XmlSchemaComplexContentExtension.cs
- BrowserCapabilitiesFactory35.cs
- XmlElementList.cs
- Trigger.cs
- ModelPerspective.cs
- TraceFilter.cs
- MissingManifestResourceException.cs
- SQLRoleProvider.cs
- ObjectDataSourceView.cs
- SqlReferenceCollection.cs
- TraceSection.cs
- FontFamily.cs
- Win32NamedPipes.cs
- XmlMembersMapping.cs
- SqlWriter.cs