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
- DataMisalignedException.cs
- odbcmetadatacolumnnames.cs
- CompilationUtil.cs
- TagPrefixCollection.cs
- LogicalChannel.cs
- WindowPattern.cs
- MaskInputRejectedEventArgs.cs
- ADMembershipUser.cs
- ZoomPercentageConverter.cs
- CultureInfo.cs
- SqlDataSourceDesigner.cs
- Monitor.cs
- PathSegment.cs
- DetailsViewPagerRow.cs
- prompt.cs
- COM2Enum.cs
- DeclarationUpdate.cs
- XmlSchemaObjectTable.cs
- xmlglyphRunInfo.cs
- ObjectManager.cs
- XmlnsCompatibleWithAttribute.cs
- SignedXml.cs
- CacheVirtualItemsEvent.cs
- DoubleLinkList.cs
- Executor.cs
- PerformanceCounterPermissionEntry.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- BindingsCollection.cs
- WmlMobileTextWriter.cs
- RegexGroupCollection.cs
- DataGridColumnCollection.cs
- ComEventsHelper.cs
- ThicknessConverter.cs
- ContractNamespaceAttribute.cs
- DataRowChangeEvent.cs
- SafeCryptContextHandle.cs
- Calendar.cs
- KeysConverter.cs
- Filter.cs
- MediaContextNotificationWindow.cs
- DayRenderEvent.cs
- IssuedTokenClientBehaviorsElementCollection.cs
- XsdDateTime.cs
- ObjectDataSource.cs
- Html32TextWriter.cs
- TextBreakpoint.cs
- ResolveCriteria.cs
- DesignerCapabilities.cs
- PlatformNotSupportedException.cs
- XmlSchemaAny.cs
- TcpChannelHelper.cs
- ScriptReferenceBase.cs
- CellIdBoolean.cs
- DataSourceXmlAttributeAttribute.cs
- AuthorizationRule.cs
- DLinqColumnProvider.cs
- _BaseOverlappedAsyncResult.cs
- Button.cs
- ReachBasicContext.cs
- SqlTriggerAttribute.cs
- AutomationPropertyInfo.cs
- UserPersonalizationStateInfo.cs
- NativeMethods.cs
- TreeIterator.cs
- Util.cs
- BitmapInitialize.cs
- ClientFormsIdentity.cs
- XmlSchemaObjectCollection.cs
- MyContact.cs
- StyleBamlTreeBuilder.cs
- ResourceDictionary.cs
- MaskedTextProvider.cs
- DbDataSourceEnumerator.cs
- HelpInfo.cs
- PermissionSetEnumerator.cs
- ReferentialConstraint.cs
- EmbeddedMailObject.cs
- InkCollectionBehavior.cs
- DataGridViewTextBoxEditingControl.cs
- DesignerDataStoredProcedure.cs
- SQLByteStorage.cs
- StopStoryboard.cs
- TrackingProvider.cs
- ToolboxBitmapAttribute.cs
- Span.cs
- ConditionalBranch.cs
- ObjectDataSourceDesigner.cs
- Accessors.cs
- CategoryGridEntry.cs
- CategoryNameCollection.cs
- DotAtomReader.cs
- DataComponentMethodGenerator.cs
- ExtensionQuery.cs
- ControlAdapter.cs
- DataServiceExpressionVisitor.cs
- SystemGatewayIPAddressInformation.cs
- SmtpLoginAuthenticationModule.cs
- MasterPageCodeDomTreeGenerator.cs
- UniqueConstraint.cs
- _NetworkingPerfCounters.cs