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
- ThaiBuddhistCalendar.cs
- RelationshipNavigation.cs
- BinaryParser.cs
- Inline.cs
- SubtreeProcessor.cs
- PieceNameHelper.cs
- PagesSection.cs
- UIAgentRequest.cs
- StylusCollection.cs
- PolicyVersion.cs
- StaticSiteMapProvider.cs
- DiscoveryServerProtocol.cs
- IntAverageAggregationOperator.cs
- InkCanvasAutomationPeer.cs
- ConfigurationValue.cs
- TcpClientSocketManager.cs
- OpCodes.cs
- XmlTextAttribute.cs
- ImmutablePropertyDescriptorGridEntry.cs
- OutKeywords.cs
- SettingsSection.cs
- InputGestureCollection.cs
- EncoderReplacementFallback.cs
- NetMsmqSecurity.cs
- SqlGatherConsumedAliases.cs
- cookieexception.cs
- XmlAggregates.cs
- DBDataPermission.cs
- WebPartCloseVerb.cs
- SqlWriter.cs
- Contracts.cs
- SyndicationLink.cs
- ProfileEventArgs.cs
- TextParagraph.cs
- ResourceLoader.cs
- TransformValueSerializer.cs
- WebPartTransformerCollection.cs
- ListViewDeletedEventArgs.cs
- NumericUpDownAcceleration.cs
- Propagator.JoinPropagator.cs
- EmptyControlCollection.cs
- SoapInteropTypes.cs
- SerialErrors.cs
- ExpressionPrefixAttribute.cs
- WebConfigurationHostFileChange.cs
- ListViewItemSelectionChangedEvent.cs
- StoreContentChangedEventArgs.cs
- Utilities.cs
- StaticExtensionConverter.cs
- MatrixKeyFrameCollection.cs
- Button.cs
- GenericRootAutomationPeer.cs
- BaseParaClient.cs
- Msec.cs
- LineProperties.cs
- OdbcConnectionPoolProviderInfo.cs
- MenuItem.cs
- DesignerPerfEventProvider.cs
- XmlChildEnumerator.cs
- TextBox.cs
- ClientRoleProvider.cs
- RegexRunner.cs
- ContentPosition.cs
- NetPeerTcpBindingCollectionElement.cs
- StyleCollectionEditor.cs
- SimpleMailWebEventProvider.cs
- TypeLoadException.cs
- DataGridViewCellStyle.cs
- BorderGapMaskConverter.cs
- StylusPoint.cs
- DiagnosticTraceSource.cs
- ServiceHostFactory.cs
- XmlSchemaImport.cs
- CodeArrayIndexerExpression.cs
- ChtmlTextBoxAdapter.cs
- BooleanAnimationBase.cs
- XmlComplianceUtil.cs
- WCFModelStrings.Designer.cs
- Type.cs
- PhoneCallDesigner.cs
- DataGridViewSelectedCellCollection.cs
- _AutoWebProxyScriptEngine.cs
- SamlSecurityTokenAuthenticator.cs
- StatusBarPanelClickEvent.cs
- Literal.cs
- SystemColorTracker.cs
- odbcmetadatafactory.cs
- CompoundFileStorageReference.cs
- WorkItem.cs
- JsonCollectionDataContract.cs
- ContainerControl.cs
- XmlTextWriter.cs
- Constants.cs
- XamlBrushSerializer.cs
- ScriptModule.cs
- CorePropertiesFilter.cs
- SettingsPropertyIsReadOnlyException.cs
- SqlCommandBuilder.cs
- Vector3DAnimationUsingKeyFrames.cs
- WebPartEditorOkVerb.cs