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
- CodeTryCatchFinallyStatement.cs
- IntegrationExceptionEventArgs.cs
- EntityViewGenerationAttribute.cs
- ReachDocumentSequenceSerializer.cs
- TypeConverter.cs
- PlaceHolder.cs
- ContextBase.cs
- GridItemCollection.cs
- UserNameSecurityTokenProvider.cs
- odbcmetadatafactory.cs
- Condition.cs
- UrlMapping.cs
- EventMappingSettings.cs
- NominalTypeEliminator.cs
- WsdlBuildProvider.cs
- TextWriter.cs
- SchemaImporterExtensionElementCollection.cs
- DirectoryNotFoundException.cs
- XhtmlTextWriter.cs
- Win32Native.cs
- ListComponentEditorPage.cs
- XmlMtomReader.cs
- ComplexBindingPropertiesAttribute.cs
- ToolStripDropDownMenu.cs
- DbConnectionPoolGroup.cs
- ActivityExecutorDelegateInfo.cs
- ExpressionBuilderCollection.cs
- WebPartEditorApplyVerb.cs
- InstanceDescriptor.cs
- RawStylusInputCustomDataList.cs
- BinaryUtilClasses.cs
- EditorZoneBase.cs
- GenerateTemporaryAssemblyTask.cs
- OleDbPermission.cs
- WmpBitmapDecoder.cs
- AsyncOperation.cs
- odbcmetadatafactory.cs
- SQLInt16Storage.cs
- TCPClient.cs
- ChannelFactory.cs
- PropertyInfoSet.cs
- ConnectionOrientedTransportElement.cs
- ContextMarshalException.cs
- TextTreeObjectNode.cs
- BinaryParser.cs
- SharedStatics.cs
- MethodBuilderInstantiation.cs
- SafeProcessHandle.cs
- MultiBindingExpression.cs
- QueryCoreOp.cs
- WCFServiceClientProxyGenerator.cs
- BooleanProjectedSlot.cs
- TextBlock.cs
- TabItem.cs
- XamlLoadErrorInfo.cs
- MessageSecurityProtocolFactory.cs
- ProcessHostConfigUtils.cs
- RegexMatchCollection.cs
- WebServiceFault.cs
- Substitution.cs
- XsdDataContractExporter.cs
- EventLogPermission.cs
- ImageBrush.cs
- MenuItem.cs
- ParameterCollection.cs
- ErrorHandler.cs
- SHA512.cs
- formatstringdialog.cs
- ProfilePropertySettingsCollection.cs
- WorkflowInstanceQuery.cs
- ObjectTag.cs
- BuiltInExpr.cs
- RegularExpressionValidator.cs
- TrustLevelCollection.cs
- Decorator.cs
- DbTypeMap.cs
- Int32AnimationBase.cs
- IsolatedStorageFilePermission.cs
- Page.cs
- Image.cs
- AnnotationComponentManager.cs
- KerberosSecurityTokenProvider.cs
- CodeIterationStatement.cs
- ImageButton.cs
- DbProviderFactoriesConfigurationHandler.cs
- Win32PrintDialog.cs
- GeometryHitTestResult.cs
- Attributes.cs
- DatePickerTextBox.cs
- PassportAuthenticationEventArgs.cs
- StatusBarDesigner.cs
- PeerNameRecord.cs
- VisualTreeHelper.cs
- EncoderExceptionFallback.cs
- Fx.cs
- HtmlContainerControl.cs
- PolyLineSegment.cs
- AtlasWeb.Designer.cs
- validationstate.cs
- MailMessageEventArgs.cs