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
- CheckableControlBaseAdapter.cs
- XamlStyleSerializer.cs
- NTAccount.cs
- RepeatButtonAutomationPeer.cs
- DataGridViewEditingControlShowingEventArgs.cs
- AppSettings.cs
- SelectionRangeConverter.cs
- CultureInfo.cs
- SqlProcedureAttribute.cs
- VisualStyleTypesAndProperties.cs
- QueryableDataSource.cs
- UserControlParser.cs
- SimpleTypesSurrogate.cs
- DesignerActionService.cs
- MessageQueuePermissionEntry.cs
- HtmlButton.cs
- IndexerReference.cs
- BufferModeSettings.cs
- SqlNotificationEventArgs.cs
- AffineTransform3D.cs
- CultureInfoConverter.cs
- SqlInfoMessageEvent.cs
- ImageInfo.cs
- DataView.cs
- IsolatedStorageException.cs
- ObjectDataSource.cs
- KeyValuePairs.cs
- ZoneMembershipCondition.cs
- AutomationElementCollection.cs
- ThemeDirectoryCompiler.cs
- WindowsNonControl.cs
- PersonalizationProviderCollection.cs
- WebSysDescriptionAttribute.cs
- SQLGuid.cs
- NonClientArea.cs
- RuntimeConfigLKG.cs
- SecurityElement.cs
- MissingSatelliteAssemblyException.cs
- Visual3D.cs
- HttpCacheVary.cs
- Attributes.cs
- DiscoveryDefaults.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- PropertyNames.cs
- PolyQuadraticBezierSegment.cs
- ParallelDesigner.cs
- BitmapSourceSafeMILHandle.cs
- BuildProvider.cs
- HttpVersion.cs
- MetadataPropertyCollection.cs
- ToolStripSystemRenderer.cs
- Polygon.cs
- FixedPage.cs
- DataControlButton.cs
- Debugger.cs
- KeyedCollection.cs
- CheckedListBox.cs
- FlagsAttribute.cs
- MonthCalendar.cs
- ProxyElement.cs
- SqlClientMetaDataCollectionNames.cs
- ProtocolsConfiguration.cs
- ThicknessAnimation.cs
- CustomAssemblyResolver.cs
- updatecommandorderer.cs
- COM2ExtendedTypeConverter.cs
- TimeStampChecker.cs
- RangeValidator.cs
- WorkflowApplicationCompletedException.cs
- PackWebResponse.cs
- SchemaConstraints.cs
- SqlCharStream.cs
- XmlSerializationWriter.cs
- EdmTypeAttribute.cs
- CorrelationScope.cs
- ImmutableObjectAttribute.cs
- ExtensionFile.cs
- InputProviderSite.cs
- embossbitmapeffect.cs
- XmlDictionaryReader.cs
- HitTestParameters.cs
- ValueSerializer.cs
- Brush.cs
- SerializerProvider.cs
- GreenMethods.cs
- JoinTreeSlot.cs
- ListDataHelper.cs
- Button.cs
- base64Transforms.cs
- TraceSection.cs
- CodeAttachEventStatement.cs
- InstallerTypeAttribute.cs
- EntityUtil.cs
- SeverityFilter.cs
- StringComparer.cs
- TdsParameterSetter.cs
- FamilyTypeface.cs
- DataSourceControlBuilder.cs
- ApplicationContext.cs
- PersonalizableTypeEntry.cs