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
- XmlLoader.cs
- BaseCodeDomTreeGenerator.cs
- SlipBehavior.cs
- SafeRegistryHandle.cs
- ZipIOCentralDirectoryFileHeader.cs
- XPathCompileException.cs
- Errors.cs
- ByteConverter.cs
- EntityDataSourceWrapperCollection.cs
- ConstraintStruct.cs
- X509Certificate.cs
- Timeline.cs
- XmlValueConverter.cs
- DataBoundLiteralControl.cs
- DbModificationClause.cs
- FormViewUpdateEventArgs.cs
- TypefaceMap.cs
- DomNameTable.cs
- ServiceHttpHandlerFactory.cs
- DbParameterCollection.cs
- SatelliteContractVersionAttribute.cs
- PostBackOptions.cs
- ObjectQuery.cs
- DBNull.cs
- PhotoPrintingIntent.cs
- PriorityQueue.cs
- BookmarkScopeInfo.cs
- FindCriteria11.cs
- HttpRequest.cs
- GenerateScriptTypeAttribute.cs
- ValueChangedEventManager.cs
- SID.cs
- HScrollProperties.cs
- PrincipalPermission.cs
- RangeValueProviderWrapper.cs
- OletxTransactionHeader.cs
- Attributes.cs
- FilterEventArgs.cs
- TextFindEngine.cs
- XPathNavigator.cs
- DataTable.cs
- CacheEntry.cs
- FixedDocument.cs
- TrustManager.cs
- SignatureGenerator.cs
- AppDomainFactory.cs
- TraceHandlerErrorFormatter.cs
- ClientRuntimeConfig.cs
- WebPartZoneCollection.cs
- DataRecordObjectView.cs
- InheritanceContextHelper.cs
- WebEventTraceProvider.cs
- control.ime.cs
- CallbackHandler.cs
- BinaryWriter.cs
- PropertyNames.cs
- SafeViewOfFileHandle.cs
- HtmlToClrEventProxy.cs
- DatePicker.cs
- URI.cs
- Condition.cs
- StopStoryboard.cs
- RemotingConfiguration.cs
- Trace.cs
- X509Extension.cs
- CancellationToken.cs
- StrokeDescriptor.cs
- WmlTextViewAdapter.cs
- RequestQueryProcessor.cs
- SuppressIldasmAttribute.cs
- ValidationSummaryDesigner.cs
- SoapReflectionImporter.cs
- SecureStringHasher.cs
- HyperLinkDesigner.cs
- FamilyTypefaceCollection.cs
- ColumnWidthChangedEvent.cs
- WebPartManagerInternals.cs
- Pen.cs
- GregorianCalendarHelper.cs
- Double.cs
- Hex.cs
- safelinkcollection.cs
- Currency.cs
- BamlLocalizationDictionary.cs
- BooleanExpr.cs
- ApplyImportsAction.cs
- InputReferenceExpression.cs
- TextRunTypographyProperties.cs
- FormClosingEvent.cs
- RtfToXamlLexer.cs
- Dump.cs
- ResetableIterator.cs
- EmptyQuery.cs
- TdsEnums.cs
- DataSetUtil.cs
- ToolStripLocationCancelEventArgs.cs
- WindowsPrincipal.cs
- VectorCollectionConverter.cs
- Viewport2DVisual3D.cs
- ConstantSlot.cs