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
- DrawingVisual.cs
- DynamicRenderer.cs
- SystemIcons.cs
- Size3DConverter.cs
- SetStoryboardSpeedRatio.cs
- XmlUnspecifiedAttribute.cs
- PathStreamGeometryContext.cs
- TypedRowHandler.cs
- SqlBuilder.cs
- TokenDescriptor.cs
- InternalConfigRoot.cs
- Base64Encoder.cs
- TypeValidationEventArgs.cs
- Utility.cs
- SyndicationDeserializer.cs
- ObjectParameterCollection.cs
- GenericTypeParameterBuilder.cs
- PauseStoryboard.cs
- AdapterDictionary.cs
- BitConverter.cs
- XMLUtil.cs
- SessionParameter.cs
- CorrelationScope.cs
- MetadataUtilsSmi.cs
- PrintPreviewGraphics.cs
- TextTreePropertyUndoUnit.cs
- ArrayWithOffset.cs
- ClientScriptManager.cs
- WebPartManagerInternals.cs
- CommonDialog.cs
- ServiceTimeoutsBehavior.cs
- BamlRecordReader.cs
- connectionpool.cs
- WpfXamlMember.cs
- QilReference.cs
- figurelengthconverter.cs
- SystemIcmpV4Statistics.cs
- OletxResourceManager.cs
- WindowsEditBoxRange.cs
- HttpProfileBase.cs
- XmlSchemaSimpleType.cs
- securitycriticaldataformultiplegetandset.cs
- ParameterCollection.cs
- ClickablePoint.cs
- XmlSortKey.cs
- MenuEventArgs.cs
- ThreadAttributes.cs
- Transform.cs
- PackagingUtilities.cs
- IArgumentProvider.cs
- StringSorter.cs
- ByteStorage.cs
- HttpCookie.cs
- CatalogZoneBase.cs
- XmlValidatingReaderImpl.cs
- XsltArgumentList.cs
- ConfigUtil.cs
- ProcessHostMapPath.cs
- DeclarativeExpressionConditionDeclaration.cs
- AuthorizationContext.cs
- DefaultBinder.cs
- InfocardInteractiveChannelInitializer.cs
- DBBindings.cs
- ListItemConverter.cs
- CapabilitiesUse.cs
- GenericEnumConverter.cs
- MsmqTransportReceiveParameters.cs
- ClientSettingsSection.cs
- BitmapSourceSafeMILHandle.cs
- RootProfilePropertySettingsCollection.cs
- TreeViewItemAutomationPeer.cs
- MessageBox.cs
- ListBoxItemAutomationPeer.cs
- DataKey.cs
- StringValidatorAttribute.cs
- ScriptingJsonSerializationSection.cs
- SmtpReplyReaderFactory.cs
- ValueHandle.cs
- Common.cs
- ColumnHeader.cs
- ButtonFlatAdapter.cs
- StrokeCollectionDefaultValueFactory.cs
- HtmlTableCell.cs
- SetterBase.cs
- TextBox.cs
- PartialToken.cs
- MissingManifestResourceException.cs
- TextTreeTextElementNode.cs
- EncodingNLS.cs
- NavigationHelper.cs
- ReferencedAssemblyResolver.cs
- HtmlTernaryTree.cs
- DependencyObjectPropertyDescriptor.cs
- TextServicesLoader.cs
- SerializationInfo.cs
- RootProfilePropertySettingsCollection.cs
- SevenBitStream.cs
- VirtualPathData.cs
- HintTextConverter.cs
- EnumConverter.cs