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
- XmlSchemaException.cs
- ProviderCommandInfoUtils.cs
- ConfigurationManager.cs
- coordinatorscratchpad.cs
- PersonalizationStateInfoCollection.cs
- EventProxy.cs
- ColorComboBox.cs
- ServiceObjectContainer.cs
- ValidationErrorEventArgs.cs
- RepeaterItemEventArgs.cs
- EntityDataSourceConfigureObjectContext.cs
- DocumentXmlWriter.cs
- ToolStripDropDownItem.cs
- DefaultTraceListener.cs
- SafeEventLogReadHandle.cs
- Hash.cs
- TrustManager.cs
- TerminatorSinks.cs
- AnnotationComponentManager.cs
- ConfigUtil.cs
- FusionWrap.cs
- BindingBase.cs
- Tag.cs
- ProviderConnectionPointCollection.cs
- SessionStateModule.cs
- TimelineClockCollection.cs
- Int32EqualityComparer.cs
- TextUtf8RawTextWriter.cs
- TransactionContextManager.cs
- List.cs
- CustomError.cs
- AttachInfo.cs
- WmpBitmapDecoder.cs
- InputManager.cs
- RuleSettings.cs
- SqlWriter.cs
- HttpHostedTransportConfiguration.cs
- AssemblyAttributesGoHere.cs
- SoapSchemaExporter.cs
- IndexedString.cs
- Point4D.cs
- XmlTextWriter.cs
- ClientScriptManagerWrapper.cs
- SplineQuaternionKeyFrame.cs
- FormClosedEvent.cs
- Scripts.cs
- IsolatedStorageFile.cs
- WebPartsSection.cs
- Span.cs
- Serializer.cs
- DataGridViewCellPaintingEventArgs.cs
- FormViewPageEventArgs.cs
- METAHEADER.cs
- CheckBoxStandardAdapter.cs
- SqlDependency.cs
- DataGridColumnStyleMappingNameEditor.cs
- TextPattern.cs
- EventLogSession.cs
- ValidatorCompatibilityHelper.cs
- TextPointer.cs
- ConfigsHelper.cs
- ReverseInheritProperty.cs
- IdentityModelDictionary.cs
- ApplicationId.cs
- LoadRetryHandler.cs
- ManagedCodeMarkers.cs
- Section.cs
- UnsafeNativeMethods.cs
- ConnectionStringSettings.cs
- ObjRef.cs
- FontStretchConverter.cs
- EdmSchemaAttribute.cs
- ObjectViewListener.cs
- BoundPropertyEntry.cs
- CellNormalizer.cs
- securitycriticaldataClass.cs
- DataControlFieldCell.cs
- DataGridViewCellCollection.cs
- XmlIgnoreAttribute.cs
- ConnectionInterfaceCollection.cs
- EnumValidator.cs
- MiniConstructorInfo.cs
- TypeUtil.cs
- PagePropertiesChangingEventArgs.cs
- _AutoWebProxyScriptHelper.cs
- HtmlAnchor.cs
- CellRelation.cs
- CorrelationToken.cs
- StubHelpers.cs
- TextTabProperties.cs
- SystemIPv4InterfaceProperties.cs
- MachineKeyValidationConverter.cs
- QueryBranchOp.cs
- ScaleTransform3D.cs
- BinaryReader.cs
- XmlSchemaSearchPattern.cs
- ISAPIApplicationHost.cs
- EntityStoreSchemaGenerator.cs
- URLIdentityPermission.cs
- TabControlEvent.cs