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
- PermissionAttributes.cs
- HtmlFormParameterWriter.cs
- TaskFactory.cs
- BaseDataList.cs
- LinkUtilities.cs
- RuntimeArgumentHandle.cs
- TargetConverter.cs
- ThemeDictionaryExtension.cs
- TraceSection.cs
- EFTableProvider.cs
- CapabilitiesAssignment.cs
- HttpListenerRequest.cs
- SpanIndex.cs
- ErrorView.xaml.cs
- GenericParameterDataContract.cs
- DataObjectEventArgs.cs
- MetadataArtifactLoaderCompositeFile.cs
- SupportingTokenParameters.cs
- dataprotectionpermission.cs
- ImmComposition.cs
- AVElementHelper.cs
- DefaultExpressionVisitor.cs
- TextElementEnumerator.cs
- BroadcastEventHelper.cs
- Properties.cs
- MemberInfoSerializationHolder.cs
- IIS7UserPrincipal.cs
- Pointer.cs
- Currency.cs
- Point4D.cs
- SubMenuStyleCollection.cs
- DBCSCodePageEncoding.cs
- StylusTip.cs
- DispatcherHooks.cs
- DataListItem.cs
- LinqDataSourceContextEventArgs.cs
- CryptoConfig.cs
- HttpResponse.cs
- NativeMethods.cs
- WebBrowserNavigatedEventHandler.cs
- DocumentPaginator.cs
- XmlNamespaceDeclarationsAttribute.cs
- PartialCachingAttribute.cs
- Select.cs
- Decoder.cs
- TrimSurroundingWhitespaceAttribute.cs
- HostedTcpTransportManager.cs
- VersionedStreamOwner.cs
- ProtocolsSection.cs
- RSAProtectedConfigurationProvider.cs
- XmlMapping.cs
- GeneralTransform.cs
- HtmlEmptyTagControlBuilder.cs
- HyperLink.cs
- CollectionViewGroupRoot.cs
- FeatureSupport.cs
- ComplexPropertyEntry.cs
- CodeTypeReferenceExpression.cs
- ToolboxItemAttribute.cs
- DBSqlParserTable.cs
- BaseCollection.cs
- Marshal.cs
- ConstraintEnumerator.cs
- LicenseProviderAttribute.cs
- ValueQuery.cs
- Line.cs
- IPEndPointCollection.cs
- HandlerMappingMemo.cs
- DbConnectionPoolGroup.cs
- RectIndependentAnimationStorage.cs
- EditingMode.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- TileBrush.cs
- UnsafeNativeMethods.cs
- ValueProviderWrapper.cs
- InvalidProgramException.cs
- MemberDescriptor.cs
- InputLanguage.cs
- XmlILTrace.cs
- ListViewCommandEventArgs.cs
- DataGridItem.cs
- NativeCompoundFileAPIs.cs
- IdentityReference.cs
- ScriptingProfileServiceSection.cs
- SafeCertificateContext.cs
- ByteRangeDownloader.cs
- Monitor.cs
- DrawingContextWalker.cs
- FontClient.cs
- FormsAuthenticationCredentials.cs
- ContractMapping.cs
- MemberMaps.cs
- TaskHelper.cs
- BCryptNative.cs
- Brush.cs
- HttpVersion.cs
- Vector.cs
- NavigationPropertyAccessor.cs
- mil_commands.cs
- AssemblyResourceLoader.cs