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
- QilGenerator.cs
- AuthenticateEventArgs.cs
- BulletedListEventArgs.cs
- XmlSchemaSimpleType.cs
- WebPartConnectionsConfigureVerb.cs
- XPathMessageContext.cs
- DataServiceBehavior.cs
- ScriptComponentDescriptor.cs
- GCHandleCookieTable.cs
- IODescriptionAttribute.cs
- FactoryId.cs
- InstanceDescriptor.cs
- X509ChainElement.cs
- TextView.cs
- HtmlTernaryTree.cs
- RenderContext.cs
- ConditionedDesigner.cs
- processwaithandle.cs
- ExtendLockCommand.cs
- _NtlmClient.cs
- DataGridViewRow.cs
- DataGridView.cs
- TextElement.cs
- Geometry.cs
- MenuItemAutomationPeer.cs
- AssociationTypeEmitter.cs
- httpstaticobjectscollection.cs
- StateMachineWorkflowDesigner.cs
- EncodingStreamWrapper.cs
- DocumentReferenceCollection.cs
- LinkDesigner.cs
- _ConnectStream.cs
- SystemWebExtensionsSectionGroup.cs
- ToolStripPanelRenderEventArgs.cs
- FunctionOverloadResolver.cs
- TemplatedMailWebEventProvider.cs
- safelink.cs
- ReflectionTypeLoadException.cs
- CustomAttributeSerializer.cs
- DataGridViewCellMouseEventArgs.cs
- CompilerScope.cs
- HttpInputStream.cs
- ImplicitInputBrush.cs
- DataBinding.cs
- CompilationSection.cs
- WizardStepBase.cs
- StyleModeStack.cs
- PublishLicense.cs
- UnsafeNativeMethods.cs
- TextContainerChangeEventArgs.cs
- DocComment.cs
- ArithmeticLiteral.cs
- DataGridItemCollection.cs
- FormCollection.cs
- BeginStoryboard.cs
- StylusTip.cs
- ViewBase.cs
- FixedTextSelectionProcessor.cs
- PolicyManager.cs
- TypeBuilder.cs
- Certificate.cs
- ContractsBCL.cs
- EdmTypeAttribute.cs
- TransportManager.cs
- COM2ExtendedUITypeEditor.cs
- ProcessHost.cs
- Emitter.cs
- ClientFormsIdentity.cs
- TransformPattern.cs
- _Connection.cs
- SHA512Cng.cs
- AxisAngleRotation3D.cs
- CachedCompositeFamily.cs
- BlurBitmapEffect.cs
- XsdValidatingReader.cs
- Pair.cs
- ToolStripPanel.cs
- ThemeDirectoryCompiler.cs
- EdmProperty.cs
- MsmqActivation.cs
- TdsParserSafeHandles.cs
- CodePrimitiveExpression.cs
- DataListCommandEventArgs.cs
- OleDbRowUpdatingEvent.cs
- LineMetrics.cs
- BinaryObjectWriter.cs
- DesigntimeLicenseContextSerializer.cs
- XmlSiteMapProvider.cs
- UpDownBaseDesigner.cs
- DescendentsWalker.cs
- AuthenticationException.cs
- ValidationRuleCollection.cs
- CopyNodeSetAction.cs
- CertificateManager.cs
- HttpStaticObjectsCollectionWrapper.cs
- ServiceOperationHelpers.cs
- DesignerSerializerAttribute.cs
- ScriptModule.cs
- ConsoleCancelEventArgs.cs
- EditorPartChrome.cs