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
- HostedTransportConfigurationManager.cs
- VectorKeyFrameCollection.cs
- RecognizerInfo.cs
- ComboBoxRenderer.cs
- HostVisual.cs
- XmlSchemaSimpleType.cs
- RowParagraph.cs
- ImageFormatConverter.cs
- Calendar.cs
- XmlRawWriter.cs
- XPathNavigator.cs
- SecurityUtils.cs
- ConfigXmlWhitespace.cs
- DataGridItem.cs
- DivideByZeroException.cs
- TextBoxAutomationPeer.cs
- GCHandleCookieTable.cs
- OracleConnectionFactory.cs
- IdentifierElement.cs
- LocalizableResourceBuilder.cs
- XmlSerializationWriter.cs
- FastEncoderWindow.cs
- SessionChannels.cs
- ViewgenGatekeeper.cs
- UnionQueryOperator.cs
- SystemTcpStatistics.cs
- Timer.cs
- DataFieldEditor.cs
- Cell.cs
- TextElementAutomationPeer.cs
- TextEditorCharacters.cs
- DesignBindingPicker.cs
- TaskSchedulerException.cs
- SortableBindingList.cs
- DateTimeFormatInfoScanner.cs
- SoapTypeAttribute.cs
- SimpleType.cs
- CompilerResults.cs
- AsymmetricSignatureFormatter.cs
- CorrelationScope.cs
- ListBoxItemWrapperAutomationPeer.cs
- ToolStripItemImageRenderEventArgs.cs
- JumpPath.cs
- PixelFormats.cs
- SmtpCommands.cs
- Range.cs
- WriteableBitmap.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- ManualResetEventSlim.cs
- WebPartZoneBase.cs
- RecordManager.cs
- WindowsUpDown.cs
- ContentDisposition.cs
- ObfuscateAssemblyAttribute.cs
- StylusPointPropertyId.cs
- MenuAdapter.cs
- PositiveTimeSpanValidatorAttribute.cs
- ElasticEase.cs
- SimpleExpression.cs
- XmlStreamStore.cs
- HttpListener.cs
- CodeTypeParameterCollection.cs
- LambdaCompiler.Logical.cs
- TraceHandlerErrorFormatter.cs
- RTTrackingProfile.cs
- _NegoState.cs
- MDIWindowDialog.cs
- LOSFormatter.cs
- ImageIndexConverter.cs
- BaseConfigurationRecord.cs
- ContextMenu.cs
- KoreanCalendar.cs
- RunWorkerCompletedEventArgs.cs
- RepeaterItem.cs
- DropShadowBitmapEffect.cs
- MediaPlayerState.cs
- TokenBasedSetEnumerator.cs
- XmlSchemaObjectTable.cs
- QilTargetType.cs
- ConditionCollection.cs
- SharedUtils.cs
- __Error.cs
- InstanceDataCollectionCollection.cs
- ArgumentNullException.cs
- QueryResults.cs
- PageHandlerFactory.cs
- RecognitionEventArgs.cs
- RSATokenProvider.cs
- StringUtil.cs
- cookie.cs
- MenuItem.cs
- NativeMethods.cs
- ProfileSection.cs
- FileIOPermission.cs
- SelectedDatesCollection.cs
- SettingsContext.cs
- DataListItem.cs
- CommandSet.cs
- ImageKeyConverter.cs
- DisplayNameAttribute.cs