Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- HtmlInputHidden.cs
- TemplatePartAttribute.cs
- InvokeHandlers.cs
- NativeWindow.cs
- HealthMonitoringSection.cs
- SoapMessage.cs
- AlphaSortedEnumConverter.cs
- PlanCompiler.cs
- MultilineStringConverter.cs
- SHA512Managed.cs
- BindingMAnagerBase.cs
- StyleBamlTreeBuilder.cs
- UpdateCompiler.cs
- Lasso.cs
- LinearKeyFrames.cs
- ConnectorEditor.cs
- KnownBoxes.cs
- ToggleButton.cs
- RadioButton.cs
- CorrelationToken.cs
- DataGridTemplateColumn.cs
- EntityPropertyMappingAttribute.cs
- WMIGenerator.cs
- _SslState.cs
- UniqueID.cs
- HandledMouseEvent.cs
- QuaternionAnimation.cs
- SafeArchiveContext.cs
- ArgumentNullException.cs
- WindowsTokenRoleProvider.cs
- EmitterCache.cs
- ColorBlend.cs
- ReflectionServiceProvider.cs
- PreservationFileReader.cs
- CheckoutException.cs
- _UncName.cs
- Empty.cs
- StringValueSerializer.cs
- XmlElementAttribute.cs
- FamilyCollection.cs
- Effect.cs
- DependentList.cs
- SizeConverter.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- KeyValuePairs.cs
- DataMemberListEditor.cs
- Grant.cs
- ConfigXmlSignificantWhitespace.cs
- SchemaType.cs
- WebServiceParameterData.cs
- ManagementEventArgs.cs
- BitConverter.cs
- DivideByZeroException.cs
- DNS.cs
- ExpressionWriter.cs
- OleDbSchemaGuid.cs
- WindowsAuthenticationEventArgs.cs
- CalendarDay.cs
- ResourceLoader.cs
- Misc.cs
- ToolboxItemCollection.cs
- ValidationHelper.cs
- RuleInfoComparer.cs
- StringCollection.cs
- SafeLocalAllocation.cs
- InteropBitmapSource.cs
- returneventsaver.cs
- CodeTypeConstructor.cs
- SurrogateSelector.cs
- RemotingConfiguration.cs
- XmlSchemaSimpleTypeRestriction.cs
- ListParagraph.cs
- IFormattable.cs
- SmtpDigestAuthenticationModule.cs
- RoleServiceManager.cs
- DrawingBrush.cs
- DataGridPagerStyle.cs
- ParserStreamGeometryContext.cs
- CharacterMetricsDictionary.cs
- XmlComment.cs
- PrimitiveType.cs
- ProxyHwnd.cs
- SynchronizedInputProviderWrapper.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- X509InitiatorCertificateClientElement.cs
- DbException.cs
- HostedHttpTransportManager.cs
- ZoomPercentageConverter.cs
- PipelineModuleStepContainer.cs
- SelectionChangedEventArgs.cs
- Error.cs
- ColorConvertedBitmapExtension.cs
- HttpListenerResponse.cs
- MailAddressParser.cs
- ResourcePermissionBase.cs
- PartialTrustVisibleAssemblyCollection.cs
- RefType.cs
- WebCategoryAttribute.cs
- GridViewCellAutomationPeer.cs
- CompositeKey.cs