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
- StylusShape.cs
- ProfileModule.cs
- XmlDocument.cs
- RouteItem.cs
- OutputCacheProfile.cs
- SrgsOneOf.cs
- VBIdentifierDesigner.xaml.cs
- RtfToXamlReader.cs
- DifferencingCollection.cs
- ToolStripItemRenderEventArgs.cs
- ReadOnlyDictionary.cs
- GeneralTransform.cs
- XsltFunctions.cs
- TextEditorMouse.cs
- XPathNode.cs
- PlatformCulture.cs
- CommandHelpers.cs
- UIntPtr.cs
- ObjectDataSourceMethodEventArgs.cs
- PersonalizationStateQuery.cs
- WinFormsUtils.cs
- Permission.cs
- ConfigurationValidatorBase.cs
- OptimizerPatterns.cs
- Stylus.cs
- XmlNamespaceManager.cs
- DataSourceCache.cs
- TiffBitmapDecoder.cs
- CompilationUnit.cs
- ToolStripPanelRow.cs
- XmlCDATASection.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- WindowsSpinner.cs
- RequestDescription.cs
- TagPrefixAttribute.cs
- Point3DKeyFrameCollection.cs
- FormatSettings.cs
- Sequence.cs
- RelationshipNavigation.cs
- XmlnsCache.cs
- RuleInfoComparer.cs
- AsyncPostBackErrorEventArgs.cs
- KeyTime.cs
- ManagedIStream.cs
- GradientStop.cs
- CommentAction.cs
- ImageMetadata.cs
- ProxyRpc.cs
- EntityDataSourceSelectingEventArgs.cs
- EventDescriptor.cs
- KnownBoxes.cs
- Lock.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- UpdateProgress.cs
- ActivityUtilities.cs
- hebrewshape.cs
- CodeNamespaceImportCollection.cs
- PeerToPeerException.cs
- NominalTypeEliminator.cs
- PlaceHolder.cs
- XPathCompileException.cs
- CharEnumerator.cs
- PermissionListSet.cs
- WorkflowDesignerMessageFilter.cs
- SharedPersonalizationStateInfo.cs
- EntityException.cs
- WindowsGraphics.cs
- PaperSize.cs
- SymmetricKey.cs
- StretchValidation.cs
- TableLayoutSettingsTypeConverter.cs
- XmlElementAttribute.cs
- ILGenerator.cs
- ItemContainerGenerator.cs
- CornerRadius.cs
- BindableTemplateBuilder.cs
- ClientBuildManager.cs
- ConnectionManagementElement.cs
- StyleXamlParser.cs
- IApplicationTrustManager.cs
- CacheManager.cs
- ConfigXmlWhitespace.cs
- _NegoStream.cs
- OletxCommittableTransaction.cs
- CodeAttributeArgument.cs
- TableColumn.cs
- TraceContextEventArgs.cs
- ISFClipboardData.cs
- NewExpression.cs
- Util.cs
- HtmlToClrEventProxy.cs
- InvokeWebServiceDesigner.cs
- InvalidAsynchronousStateException.cs
- Pts.cs
- ComEventsSink.cs
- sqlmetadatafactory.cs
- _CookieModule.cs
- Evidence.cs
- FlowDocumentReaderAutomationPeer.cs
- SchemaTableColumn.cs