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
- VersionPair.cs
- MailBnfHelper.cs
- ConditionChanges.cs
- WindowsScrollBar.cs
- Message.cs
- ListViewPagedDataSource.cs
- TreeIterator.cs
- XmlComplianceUtil.cs
- TrackPoint.cs
- TrustSection.cs
- OuterGlowBitmapEffect.cs
- PreviewKeyDownEventArgs.cs
- Symbol.cs
- ProfileModule.cs
- CommonXSendMessage.cs
- DataRowView.cs
- CodeAccessPermission.cs
- Floater.cs
- XmlSchemaObjectCollection.cs
- OleDbEnumerator.cs
- InputLanguage.cs
- ListDictionary.cs
- XmlHierarchicalDataSourceView.cs
- CacheVirtualItemsEvent.cs
- TraceSection.cs
- StorageTypeMapping.cs
- MatrixAnimationBase.cs
- _SecureChannel.cs
- DesignSurfaceCollection.cs
- dataprotectionpermission.cs
- TextTreeDeleteContentUndoUnit.cs
- WebPart.cs
- GroupJoinQueryOperator.cs
- DataProviderNameConverter.cs
- HitTestResult.cs
- CipherData.cs
- ExpressionWriter.cs
- AnimationLayer.cs
- SqlBuffer.cs
- PanelDesigner.cs
- CharConverter.cs
- DataColumnChangeEvent.cs
- followingquery.cs
- AnnotationStore.cs
- DesignerSerializationOptionsAttribute.cs
- TextTreeInsertElementUndoUnit.cs
- CustomAttribute.cs
- PolyQuadraticBezierSegment.cs
- RestHandler.cs
- DiscoveryReference.cs
- MessagePartSpecification.cs
- DataControlFieldCollection.cs
- CollectionView.cs
- StringBlob.cs
- DetailsViewInsertedEventArgs.cs
- Paragraph.cs
- PolicyUnit.cs
- XhtmlBasicLiteralTextAdapter.cs
- StringValueSerializer.cs
- hebrewshape.cs
- XmlNodeComparer.cs
- AuthenticationModuleElement.cs
- ConfigurationValue.cs
- ApplicationProxyInternal.cs
- assemblycache.cs
- SpeakInfo.cs
- ConditionedDesigner.cs
- AssociationTypeEmitter.cs
- TextAdaptor.cs
- XmlSchemaProviderAttribute.cs
- XPathPatternBuilder.cs
- DataSpaceManager.cs
- WsdlBuildProvider.cs
- XmlSchemaInclude.cs
- ReadOnlyAttribute.cs
- PrePostDescendentsWalker.cs
- MetadataCollection.cs
- SessionStateUtil.cs
- BitmapEffect.cs
- DateTimeHelper.cs
- DataGridCell.cs
- BinaryReader.cs
- Padding.cs
- HighlightComponent.cs
- AnnotationAuthorChangedEventArgs.cs
- ClientSettings.cs
- FloaterParagraph.cs
- EventMappingSettings.cs
- SessionStateModule.cs
- EpmSourceTree.cs
- ActivatableWorkflowsQueryResult.cs
- Triplet.cs
- EventPropertyMap.cs
- SessionEndedEventArgs.cs
- StreamHelper.cs
- SQLString.cs
- EntityTransaction.cs
- GiveFeedbackEvent.cs
- ResourceDescriptionAttribute.cs
- QuotedPrintableStream.cs