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
- parserscommon.cs
- sqlcontext.cs
- WebPartDisplayModeEventArgs.cs
- ChildrenQuery.cs
- CommandConverter.cs
- GuidConverter.cs
- SqlUDTStorage.cs
- LocationUpdates.cs
- SystemIcmpV4Statistics.cs
- GenericParameterDataContract.cs
- ExternalDataExchangeService.cs
- Membership.cs
- TextEditorMouse.cs
- DetailsViewModeEventArgs.cs
- HttpProfileBase.cs
- WindowsRebar.cs
- HMACMD5.cs
- GeneralTransform3D.cs
- Rotation3DAnimationBase.cs
- TextDecorationLocationValidation.cs
- MappingItemCollection.cs
- ConsoleEntryPoint.cs
- RadioButton.cs
- FullTrustAssembliesSection.cs
- Pen.cs
- WorkflowClientDeliverMessageWrapper.cs
- AncestorChangedEventArgs.cs
- XsdBuildProvider.cs
- Int64KeyFrameCollection.cs
- DaylightTime.cs
- AuthenticationSection.cs
- InputProviderSite.cs
- RequestCachePolicyConverter.cs
- DataKey.cs
- UserControl.cs
- Validator.cs
- MD5HashHelper.cs
- LineServicesRun.cs
- StrongNameKeyPair.cs
- ToolboxComponentsCreatingEventArgs.cs
- Canvas.cs
- IdlingCommunicationPool.cs
- SafeUserTokenHandle.cs
- MenuBase.cs
- SQLGuid.cs
- PropertyGrid.cs
- MessageDecoder.cs
- PersistencePipeline.cs
- ZipIOModeEnforcingStream.cs
- OneOfTypeConst.cs
- TransactionManager.cs
- Parallel.cs
- MonthCalendarDesigner.cs
- CacheDependency.cs
- BindableAttribute.cs
- TagPrefixInfo.cs
- WebPermission.cs
- GAC.cs
- DnsPermission.cs
- COM2IDispatchConverter.cs
- WebPartEditorCancelVerb.cs
- EventsTab.cs
- TimeManager.cs
- HTMLTagNameToTypeMapper.cs
- NullRuntimeConfig.cs
- FolderLevelBuildProviderCollection.cs
- ListViewGroupConverter.cs
- wmiprovider.cs
- UnsettableComboBox.cs
- CapabilitiesUse.cs
- ComponentManagerBroker.cs
- NamedPipeAppDomainProtocolHandler.cs
- ToolTip.cs
- DataRelationPropertyDescriptor.cs
- CompressStream.cs
- NullableFloatMinMaxAggregationOperator.cs
- SocketElement.cs
- XmlJsonWriter.cs
- CategoryGridEntry.cs
- FontFamily.cs
- SplashScreen.cs
- ToolStripProgressBar.cs
- WizardSideBarListControlItemEventArgs.cs
- MdImport.cs
- PathParser.cs
- HighContrastHelper.cs
- OpenFileDialog.cs
- RSAPKCS1SignatureDeformatter.cs
- FreezableOperations.cs
- PolyQuadraticBezierSegment.cs
- AutoSizeToolBoxItem.cs
- MatrixCamera.cs
- DriveNotFoundException.cs
- EventLogger.cs
- StyleModeStack.cs
- ScriptingScriptResourceHandlerSection.cs
- MobileUITypeEditor.cs
- EmptyStringExpandableObjectConverter.cs
- CompareInfo.cs
- ClientUrlResolverWrapper.cs