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
- IdentityReference.cs
- HttpModuleCollection.cs
- DataSourceView.cs
- DataSourceConverter.cs
- AudioException.cs
- UnSafeCharBuffer.cs
- PersistChildrenAttribute.cs
- StatusCommandUI.cs
- ByteStream.cs
- ToolboxDataAttribute.cs
- SkipQueryOptionExpression.cs
- WebBrowserNavigatedEventHandler.cs
- GZipObjectSerializer.cs
- XmlWellformedWriter.cs
- PKCS1MaskGenerationMethod.cs
- Timer.cs
- InkCollectionBehavior.cs
- Mapping.cs
- XsltCompileContext.cs
- NegatedCellConstant.cs
- ProfileParameter.cs
- AstTree.cs
- Membership.cs
- TypeDelegator.cs
- DetailsViewCommandEventArgs.cs
- TextFormatterContext.cs
- WebSysDisplayNameAttribute.cs
- BinaryFormatterSinks.cs
- TextBoxLine.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- XamlBrushSerializer.cs
- RegexRunner.cs
- ExecutionTracker.cs
- BaseInfoTable.cs
- ButtonBaseAdapter.cs
- PasswordBoxAutomationPeer.cs
- RotateTransform.cs
- BaseDataBoundControl.cs
- DescendantBaseQuery.cs
- SimpleTypesSurrogate.cs
- UpdateException.cs
- InputLanguageProfileNotifySink.cs
- IndividualDeviceConfig.cs
- WeakReference.cs
- PathFigureCollection.cs
- SessionPageStatePersister.cs
- SubMenuStyle.cs
- ToolStripItem.cs
- Accessible.cs
- ImageMetadata.cs
- DefaultHttpHandler.cs
- Pts.cs
- DataGridViewCellStyleChangedEventArgs.cs
- MetadataSet.cs
- DataGridViewTextBoxColumn.cs
- ObjectSet.cs
- SqlXml.cs
- CodeGroup.cs
- DelimitedListTraceListener.cs
- HttpResponseInternalBase.cs
- SecurityCriticalDataForSet.cs
- SystemColors.cs
- Int32.cs
- SrgsSemanticInterpretationTag.cs
- HttpResponseBase.cs
- Object.cs
- ListViewUpdateEventArgs.cs
- NameScopePropertyAttribute.cs
- Stack.cs
- RNGCryptoServiceProvider.cs
- ThemeInfoAttribute.cs
- Internal.cs
- OleAutBinder.cs
- SqlDelegatedTransaction.cs
- MenuItemBindingCollection.cs
- MultipleViewPattern.cs
- ChineseLunisolarCalendar.cs
- DataGridViewBindingCompleteEventArgs.cs
- DynamicArgumentDesigner.xaml.cs
- WebGetAttribute.cs
- PrincipalPermissionMode.cs
- SQLBytesStorage.cs
- precedingsibling.cs
- DependencyPropertyValueSerializer.cs
- ValidatedControlConverter.cs
- StatusBarPanel.cs
- InkPresenter.cs
- ToggleButtonAutomationPeer.cs
- WebExceptionStatus.cs
- WindowCollection.cs
- SymbolTable.cs
- DataBoundControlDesigner.cs
- AsyncOperation.cs
- DataGridPageChangedEventArgs.cs
- TextEditor.cs
- DataSourceControlBuilder.cs
- SqlDataSourceQueryEditor.cs
- JpegBitmapDecoder.cs
- AccessDataSource.cs
- HttpHandlerActionCollection.cs