Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListMarkerLine.cs
- NavigationProgressEventArgs.cs
- LogicalExpr.cs
- ConnectionConsumerAttribute.cs
- NumericPagerField.cs
- LinqDataSourceContextEventArgs.cs
- StateRuntime.cs
- DataMemberAttribute.cs
- ListViewGroupItemCollection.cs
- QuaternionRotation3D.cs
- FileDataSourceCache.cs
- SqlDelegatedTransaction.cs
- DataMemberAttribute.cs
- ValidationEventArgs.cs
- QilScopedVisitor.cs
- DataGridViewHitTestInfo.cs
- IPGlobalProperties.cs
- TrackingStringDictionary.cs
- Addressing.cs
- SecurityDescriptor.cs
- ToolStripProgressBar.cs
- DeleteMemberBinder.cs
- RegistryPermission.cs
- milexports.cs
- DispatcherOperation.cs
- XmlNotation.cs
- Assert.cs
- CalendarDesigner.cs
- Quad.cs
- InertiaExpansionBehavior.cs
- Visual3D.cs
- XMLSchema.cs
- templategroup.cs
- DataPagerCommandEventArgs.cs
- RouteTable.cs
- Pair.cs
- DrawingGroupDrawingContext.cs
- BufferModesCollection.cs
- ListViewGroupItemCollection.cs
- UniqueIdentifierService.cs
- FtpCachePolicyElement.cs
- LambdaCompiler.Binary.cs
- KeyValuePairs.cs
- EllipticalNodeOperations.cs
- Module.cs
- ToolBarDesigner.cs
- SqlDependencyListener.cs
- DBAsyncResult.cs
- SynchronizedPool.cs
- Floater.cs
- SQLInt32.cs
- TypeConverterHelper.cs
- ToolStripRenderEventArgs.cs
- MatrixTransform3D.cs
- WebServiceHostFactory.cs
- DesignerAdRotatorAdapter.cs
- ScriptManagerProxy.cs
- OlePropertyStructs.cs
- PageThemeCodeDomTreeGenerator.cs
- PtsContext.cs
- sqlnorm.cs
- JsonFormatWriterGenerator.cs
- ContextMarshalException.cs
- TextBox.cs
- wmiprovider.cs
- DataGridViewAdvancedBorderStyle.cs
- SingleSelectRootGridEntry.cs
- GPPOINTF.cs
- SqlCrossApplyToCrossJoin.cs
- DependentList.cs
- LoadedOrUnloadedOperation.cs
- HtmlInputFile.cs
- ProcessModule.cs
- GenericEnumerator.cs
- OpenTypeLayoutCache.cs
- WindowManager.cs
- MessageRpc.cs
- WindowsTab.cs
- NameObjectCollectionBase.cs
- XhtmlBasicPhoneCallAdapter.cs
- UpdateProgress.cs
- MouseGestureConverter.cs
- RuleCache.cs
- SHA1CryptoServiceProvider.cs
- GetChildSubtree.cs
- XmlILIndex.cs
- DrawingAttributesDefaultValueFactory.cs
- PublisherMembershipCondition.cs
- AssemblyBuilder.cs
- ContractNamespaceAttribute.cs
- MethodBuilder.cs
- HttpChannelFactory.cs
- NotifyParentPropertyAttribute.cs
- ValidationContext.cs
- PreviewKeyDownEventArgs.cs
- ProcessRequestArgs.cs
- SortedList.cs
- HScrollBar.cs
- InputEventArgs.cs
- Size.cs