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
- MailHeaderInfo.cs
- ContainerActivationHelper.cs
- ConnectionPoolManager.cs
- DuplicateWaitObjectException.cs
- _ListenerRequestStream.cs
- WebPartMovingEventArgs.cs
- ConnectionManagementSection.cs
- HttpApplicationStateWrapper.cs
- comcontractssection.cs
- MouseActionConverter.cs
- PhysicalAddress.cs
- Models.cs
- FlowDocumentFormatter.cs
- CodeTypeReference.cs
- Activation.cs
- LinqDataSourceHelper.cs
- XPathItem.cs
- SafeNativeMethods.cs
- TemplatedMailWebEventProvider.cs
- ThemeDictionaryExtension.cs
- DesignerAttribute.cs
- TimeSpanSecondsConverter.cs
- MethodBuilder.cs
- SQLUtility.cs
- PartialArray.cs
- HtmlInputButton.cs
- DeflateStream.cs
- LocationEnvironment.cs
- CounterSample.cs
- BoolExpressionVisitors.cs
- CredentialCache.cs
- SystemIPGlobalStatistics.cs
- WeakReferenceEnumerator.cs
- WSHttpBindingCollectionElement.cs
- ViewStateException.cs
- SharedDp.cs
- ControlBuilder.cs
- GridSplitter.cs
- RegexInterpreter.cs
- mediaeventshelper.cs
- DropShadowBitmapEffect.cs
- BindStream.cs
- RuntimeHandles.cs
- MultiTrigger.cs
- ObjectDataSourceDisposingEventArgs.cs
- CheckPair.cs
- webclient.cs
- RawAppCommandInputReport.cs
- Knowncolors.cs
- SetState.cs
- DocumentSequence.cs
- PropertyGridEditorPart.cs
- Deflater.cs
- HtmlLink.cs
- SourceElementsCollection.cs
- SerializationSectionGroup.cs
- DataServiceQueryProvider.cs
- LambdaCompiler.Lambda.cs
- ListSortDescription.cs
- EntityContainerEmitter.cs
- MethodExpression.cs
- ByeOperationCD1AsyncResult.cs
- Socket.cs
- UpdateProgress.cs
- EditorZoneAutoFormat.cs
- PageAdapter.cs
- RtfToken.cs
- DataSpaceManager.cs
- oledbmetadatacollectionnames.cs
- DeviceFilterDictionary.cs
- OdbcParameterCollection.cs
- Size.cs
- ElementNotEnabledException.cs
- WindowsIPAddress.cs
- QuerySafeNavigator.cs
- SourceElementsCollection.cs
- StreamWithDictionary.cs
- RawStylusInput.cs
- MulticastOption.cs
- UIElement3D.cs
- GridViewRowEventArgs.cs
- webeventbuffer.cs
- PiiTraceSource.cs
- MultiBinding.cs
- OleDbErrorCollection.cs
- SocketAddress.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- TrackingServices.cs
- IconConverter.cs
- StringOutput.cs
- StyleSheetDesigner.cs
- Quaternion.cs
- DBSchemaTable.cs
- SupportedAddressingMode.cs
- TableCellCollection.cs
- OracleColumn.cs
- PermissionSetTriple.cs
- FixedSOMGroup.cs
- StringValidator.cs
- ZipIOLocalFileBlock.cs