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
- Journal.cs
- ClientConvert.cs
- TopClause.cs
- AssemblyBuilder.cs
- NullableBoolConverter.cs
- DetailsViewDeletedEventArgs.cs
- SafeNativeMethods.cs
- Margins.cs
- XsltContext.cs
- SiteMapNode.cs
- DocumentXmlWriter.cs
- XmlLangPropertyAttribute.cs
- ExpressionConverter.cs
- MaskedTextProvider.cs
- PersonalizationProviderCollection.cs
- ExceptionNotification.cs
- SafeWaitHandle.cs
- MenuItem.cs
- NumericExpr.cs
- SymbolMethod.cs
- ThemeableAttribute.cs
- DiscreteKeyFrames.cs
- ResourcesGenerator.cs
- VectorValueSerializer.cs
- QueryExtender.cs
- ArglessEventHandlerProxy.cs
- WebPartCatalogAddVerb.cs
- DataGridHyperlinkColumn.cs
- AttributeProviderAttribute.cs
- NonParentingControl.cs
- UnsafeNativeMethods.cs
- ClosableStream.cs
- PriorityQueue.cs
- _TransmitFileOverlappedAsyncResult.cs
- DateTimeStorage.cs
- LineSegment.cs
- WpfSharedXamlSchemaContext.cs
- KeyValueSerializer.cs
- MouseButton.cs
- TypeLoadException.cs
- XmlSiteMapProvider.cs
- CompilerState.cs
- SynchronizedReadOnlyCollection.cs
- OutputCacheSettingsSection.cs
- CompilerScopeManager.cs
- ProviderConnectionPointCollection.cs
- OdbcEnvironment.cs
- XmlWrappingReader.cs
- CollectionType.cs
- ProviderConnectionPoint.cs
- XmlDataDocument.cs
- HandlerWithFactory.cs
- TimerElapsedEvenArgs.cs
- ErrorFormatterPage.cs
- AsyncCompletedEventArgs.cs
- GeometryHitTestParameters.cs
- MimeFormReflector.cs
- HttpException.cs
- MetadataWorkspace.cs
- TriggerAction.cs
- SrgsGrammarCompiler.cs
- PnrpPermission.cs
- ImageAutomationPeer.cs
- BooleanAnimationUsingKeyFrames.cs
- IntSecurity.cs
- Empty.cs
- StatusBarDrawItemEvent.cs
- AssertFilter.cs
- SelectionEditor.cs
- ErrorStyle.cs
- SqlWebEventProvider.cs
- PackageDigitalSignature.cs
- XmlSerializableReader.cs
- ResourceProviderFactory.cs
- TypeToken.cs
- IncrementalHitTester.cs
- TypefaceMap.cs
- ComUdtElement.cs
- Ray3DHitTestResult.cs
- ListViewItem.cs
- DesignTimeSiteMapProvider.cs
- MetadataArtifactLoaderFile.cs
- StylusCaptureWithinProperty.cs
- TranslateTransform3D.cs
- Pens.cs
- XmlSchema.cs
- ForAllOperator.cs
- HwndSourceParameters.cs
- Expression.cs
- StateInitialization.cs
- DataGridViewColumnCollectionDialog.cs
- GreaterThanOrEqual.cs
- ProcessManager.cs
- CryptoHelper.cs
- ButtonFieldBase.cs
- storagemappingitemcollection.viewdictionary.cs
- Panel.cs
- WindowsListViewItem.cs
- Vector3DAnimationBase.cs
- DLinqTableProvider.cs