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
- SizeValueSerializer.cs
- WebScriptEndpointElement.cs
- CompositeDataBoundControl.cs
- LicenseManager.cs
- GatewayIPAddressInformationCollection.cs
- InputLangChangeRequestEvent.cs
- HttpRuntime.cs
- HttpCapabilitiesEvaluator.cs
- SQLUtility.cs
- ParserStack.cs
- DataControlButton.cs
- ElementProxy.cs
- clipboard.cs
- Enum.cs
- Visual3D.cs
- OutputCacheProfile.cs
- ToolStripSplitStackLayout.cs
- securestring.cs
- XPathNode.cs
- SignatureHelper.cs
- DataObjectSettingDataEventArgs.cs
- SequenceQuery.cs
- TableRowGroup.cs
- NavigationPropertyAccessor.cs
- ToggleButtonAutomationPeer.cs
- UnsafeNativeMethods.cs
- SqlCacheDependencySection.cs
- SessionStateModule.cs
- FormClosedEvent.cs
- ConnectionInterfaceCollection.cs
- IQueryable.cs
- StateMachine.cs
- XmlParserContext.cs
- ILGenerator.cs
- TraceHandler.cs
- HighlightOverlayGlyph.cs
- DateTimeSerializationSection.cs
- WindowsTokenRoleProvider.cs
- GeometryDrawing.cs
- WebUtil.cs
- SizeKeyFrameCollection.cs
- Overlapped.cs
- TraceUtils.cs
- StylusButtonCollection.cs
- SerializeAbsoluteContext.cs
- DataTableMapping.cs
- BufferedStream.cs
- XpsResourcePolicy.cs
- Type.cs
- StringComparer.cs
- ConfigurationErrorsException.cs
- CompilerTypeWithParams.cs
- ScriptControlManager.cs
- SevenBitStream.cs
- SqlBuilder.cs
- NullableFloatMinMaxAggregationOperator.cs
- NominalTypeEliminator.cs
- RuntimeCompatibilityAttribute.cs
- SqlUtils.cs
- selecteditemcollection.cs
- LogicalExpr.cs
- CssClassPropertyAttribute.cs
- SslStreamSecurityBindingElement.cs
- WebPartDisplayModeCollection.cs
- PeekCompletedEventArgs.cs
- RowSpanVector.cs
- TimeStampChecker.cs
- PenLineJoinValidation.cs
- XmlSchemas.cs
- ToolStripOverflow.cs
- DurationConverter.cs
- TimelineGroup.cs
- UshortList2.cs
- ManifestResourceInfo.cs
- TabControlAutomationPeer.cs
- SqlNodeAnnotations.cs
- XmlnsDictionary.cs
- ServiceMetadataContractBehavior.cs
- ScrollPattern.cs
- _AutoWebProxyScriptEngine.cs
- KeyTime.cs
- RijndaelManagedTransform.cs
- Logging.cs
- DesignParameter.cs
- XmlNullResolver.cs
- AsyncOperation.cs
- ErrorEventArgs.cs
- SmiMetaDataProperty.cs
- MemberHolder.cs
- SHA1.cs
- XamlDesignerSerializationManager.cs
- HandlerFactoryCache.cs
- UnsafeNativeMethodsMilCoreApi.cs
- ListViewGroupItemCollection.cs
- BigInt.cs
- ConnectivityStatus.cs
- PersonalizationStateQuery.cs
- Attributes.cs
- SchemaImporterExtension.cs
- AuthenticateEventArgs.cs