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
- UpdateDelegates.Generated.cs
- WCFBuildProvider.cs
- ToolboxSnapDragDropEventArgs.cs
- ByteStream.cs
- Hash.cs
- WebPartDisplayModeCancelEventArgs.cs
- ObjectListItemCollection.cs
- AnnotationObservableCollection.cs
- KeyTime.cs
- TcpServerChannel.cs
- MailWebEventProvider.cs
- UnsafeCollabNativeMethods.cs
- _NtlmClient.cs
- ScrollableControlDesigner.cs
- BCLDebug.cs
- CoTaskMemUnicodeSafeHandle.cs
- TypeBuilder.cs
- DockPanel.cs
- ChannelBinding.cs
- InputDevice.cs
- PropertyFilterAttribute.cs
- Debug.cs
- GenericEnumerator.cs
- XmlParserContext.cs
- CodeEntryPointMethod.cs
- ClientCredentials.cs
- ExpandCollapsePatternIdentifiers.cs
- FlagsAttribute.cs
- ExceptionHelpers.cs
- Vars.cs
- X509AsymmetricSecurityKey.cs
- SafeArrayRankMismatchException.cs
- LiteralControl.cs
- SafeProcessHandle.cs
- TraceEventCache.cs
- RangeValuePatternIdentifiers.cs
- XmlSchemaSimpleContentExtension.cs
- CacheMode.cs
- ExtensionWindow.cs
- SimpleTableProvider.cs
- TemplateBindingExpression.cs
- ExtendedPropertyDescriptor.cs
- SqlFunctionAttribute.cs
- DataSourceSelectArguments.cs
- ReachSerializer.cs
- SecureStringHasher.cs
- CapabilitiesRule.cs
- MsmqHostedTransportConfiguration.cs
- Decoder.cs
- InputLanguage.cs
- GenericUriParser.cs
- ChannelManager.cs
- ScaleTransform3D.cs
- fixedPageContentExtractor.cs
- UnsafeNativeMethodsTablet.cs
- RichTextBoxAutomationPeer.cs
- PrivilegedConfigurationManager.cs
- WebAdminConfigurationHelper.cs
- X509CertificateCollection.cs
- ConstructorNeedsTagAttribute.cs
- TextEffect.cs
- XmlDocument.cs
- And.cs
- AsymmetricSignatureFormatter.cs
- Subtract.cs
- OleDbMetaDataFactory.cs
- TraceUtility.cs
- SerialReceived.cs
- ConvertersCollection.cs
- CurrencyManager.cs
- UnsafeNativeMethods.cs
- TextInfo.cs
- ObjectFullSpanRewriter.cs
- TimeZone.cs
- ToolStripScrollButton.cs
- BufferedGraphicsContext.cs
- DecimalConverter.cs
- __FastResourceComparer.cs
- ContainerUIElement3D.cs
- CustomAssemblyResolver.cs
- DebuggerService.cs
- ServiceOperationParameter.cs
- OdbcDataReader.cs
- BitmapEffectInputData.cs
- SemaphoreSecurity.cs
- IteratorDescriptor.cs
- KeyGestureValueSerializer.cs
- BulletChrome.cs
- AuthenticationManager.cs
- StatusBarItemAutomationPeer.cs
- DatagridviewDisplayedBandsData.cs
- ErrorWrapper.cs
- DESCryptoServiceProvider.cs
- pingexception.cs
- DesignerActionMethodItem.cs
- Window.cs
- ListView.cs
- DbParameterCollectionHelper.cs
- DataProviderNameConverter.cs
- StickyNoteHelper.cs