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
- CacheRequest.cs
- CultureInfoConverter.cs
- BufferModesCollection.cs
- UrlMappingsSection.cs
- Rotation3D.cs
- MembershipValidatePasswordEventArgs.cs
- FileDataSourceCache.cs
- LinkTarget.cs
- MailAddressCollection.cs
- SocketPermission.cs
- AttributeEmitter.cs
- WrapperEqualityComparer.cs
- ToolStrip.cs
- HtmlInputImage.cs
- SocketStream.cs
- ColorTransformHelper.cs
- ExtractedStateEntry.cs
- sqlinternaltransaction.cs
- GridViewCellAutomationPeer.cs
- MaskedTextBoxDesigner.cs
- HtmlLink.cs
- FixedElement.cs
- GridViewDeletedEventArgs.cs
- WebSysDisplayNameAttribute.cs
- TextReader.cs
- PasswordTextContainer.cs
- ColumnMapVisitor.cs
- UshortList2.cs
- IPHostEntry.cs
- SecurityHelper.cs
- FlowLayoutSettings.cs
- CompilerParameters.cs
- PointAnimationUsingKeyFrames.cs
- HTMLTextWriter.cs
- MetadataCache.cs
- CompilerError.cs
- XmlFormatExtensionPointAttribute.cs
- PropertyBuilder.cs
- OverrideMode.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- ErrorFormatterPage.cs
- WebPartManagerInternals.cs
- ToolStripSettings.cs
- ListManagerBindingsCollection.cs
- File.cs
- NavigationFailedEventArgs.cs
- WizardStepBase.cs
- ExtensionSimplifierMarkupObject.cs
- SoapProtocolImporter.cs
- ValueConversionAttribute.cs
- BaseParaClient.cs
- MailAddress.cs
- ListViewInsertionMark.cs
- DbTransaction.cs
- Preprocessor.cs
- X509CertificateTokenFactoryCredential.cs
- NodeInfo.cs
- ExpandSegmentCollection.cs
- PrePostDescendentsWalker.cs
- RequestStatusBarUpdateEventArgs.cs
- SetIterators.cs
- FunctionImportElement.cs
- ImageListUtils.cs
- InternalBufferOverflowException.cs
- XmlComment.cs
- ClientOperationFormatterProvider.cs
- FunctionQuery.cs
- MetadataException.cs
- BoundColumn.cs
- TransformCollection.cs
- BindingValueChangedEventArgs.cs
- XmlAtomicValue.cs
- WebPartTracker.cs
- PolicyStatement.cs
- Method.cs
- MobileControlsSectionHelper.cs
- Style.cs
- BulletedList.cs
- MappingSource.cs
- DefaultTextStore.cs
- ImageMapEventArgs.cs
- WorkflowServiceBuildProvider.cs
- Transform.cs
- XmlDictionaryString.cs
- MimeTypeAttribute.cs
- NotImplementedException.cs
- BufferedGraphicsContext.cs
- Size.cs
- ServiceInstanceProvider.cs
- ExceptionHelpers.cs
- SslStream.cs
- SecurityHeaderLayout.cs
- EventSchemaTraceListener.cs
- ProcessDesigner.cs
- XmlCountingReader.cs
- KernelTypeValidation.cs
- WindowCollection.cs
- StateElement.cs
- Stack.cs
- Assembly.cs