Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ScrollChrome.cs
- ListViewHitTestInfo.cs
- Boolean.cs
- StyleXamlTreeBuilder.cs
- ProjectedSlot.cs
- SelectionRange.cs
- StructuredTypeInfo.cs
- AutoGeneratedFieldProperties.cs
- XmlIterators.cs
- HtmlInputImage.cs
- EventItfInfo.cs
- HtmlInputImage.cs
- InternalRelationshipCollection.cs
- ListControl.cs
- _LocalDataStoreMgr.cs
- DateTimeFormatInfo.cs
- HttpServerChannel.cs
- ToolStripPanelDesigner.cs
- PagesChangedEventArgs.cs
- DirectoryNotFoundException.cs
- HwndSource.cs
- HttpListenerContext.cs
- SiteIdentityPermission.cs
- SourceFileBuildProvider.cs
- MyContact.cs
- TextRunTypographyProperties.cs
- DelayedRegex.cs
- TextWriterEngine.cs
- SQLBinary.cs
- CodeNamespaceCollection.cs
- ErrorWebPart.cs
- ContextStack.cs
- ExecutionEngineException.cs
- ImportStoreException.cs
- UpdateCommand.cs
- CheckedPointers.cs
- RawMouseInputReport.cs
- DesignerOptionService.cs
- ColorTransformHelper.cs
- TextAnchor.cs
- RepeaterItemCollection.cs
- ProcessModuleCollection.cs
- DynamicPropertyHolder.cs
- CustomErrorsSectionWrapper.cs
- TableRow.cs
- ProjectionQueryOptionExpression.cs
- ControlBindingsCollection.cs
- FileVersion.cs
- PathParser.cs
- SimpleWorkerRequest.cs
- PreviewPageInfo.cs
- ThreadAttributes.cs
- X509Chain.cs
- XmlReflectionImporter.cs
- DecodeHelper.cs
- AlphaSortedEnumConverter.cs
- CachingParameterInspector.cs
- OdbcParameterCollection.cs
- Rect3DConverter.cs
- SecurityCriticalDataForSet.cs
- URI.cs
- ExpandCollapsePattern.cs
- Coordinator.cs
- ContentHostHelper.cs
- SqlInternalConnection.cs
- CollectionChangedEventManager.cs
- DataRecordInternal.cs
- EntityDataSourceWrapperCollection.cs
- DiscoveryExceptionDictionary.cs
- MessageQueueTransaction.cs
- IndentedWriter.cs
- HttpGetProtocolReflector.cs
- CodeGenerator.cs
- OpenFileDialog.cs
- PolicyValidationException.cs
- Collection.cs
- StackOverflowException.cs
- Component.cs
- OperationPickerDialog.designer.cs
- SelectionUIService.cs
- DeviceFilterEditorDialog.cs
- RepeatBehaviorConverter.cs
- HtmlInputPassword.cs
- Expression.cs
- FormClosingEvent.cs
- TdsRecordBufferSetter.cs
- WindowsComboBox.cs
- SchemaManager.cs
- AddValidationError.cs
- TreeNodeCollection.cs
- SqlWebEventProvider.cs
- AmbientProperties.cs
- EntityDataSourceEntitySetNameItem.cs
- ButtonBaseAutomationPeer.cs
- InheritablePropertyChangeInfo.cs
- WebPart.cs
- CngKeyCreationParameters.cs
- SmiGettersStream.cs
- ModelTreeEnumerator.cs
- WindowsSysHeader.cs