Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Base / System / Windows / Threading / DispatcherSynchronizationContext.cs / 1 / DispatcherSynchronizationContext.cs
using System;
using System.Threading;
using System.Diagnostics;
using System.ComponentModel;
using System.Security; // CAS
using System.Security.Permissions; // Registry permissions
namespace System.Windows.Threading
{
///
/// SynchronizationContext subclass used by the Dispatcher.
///
public sealed class DispatcherSynchronizationContext : SynchronizationContext
{
///
/// Constructs a new instance of the DispatcherSynchroniazationContext
/// using the current Dispatcher.
///
public DispatcherSynchronizationContext() : this(Dispatcher.CurrentDispatcher)
{
}
///
/// Constructs a new instance of the DispatcherSynchroniazationContext
/// using the specified Dispatcher.
///
public DispatcherSynchronizationContext(Dispatcher dispatcher)
{
if(dispatcher == null)
{
throw new ArgumentNullException("dispatcher");
}
_dispatcher = dispatcher;
// Tell the CLR to call us when blocking.
SetWaitNotificationRequired();
}
///
/// Synchronously invoke the callback in the SynchronizationContext.
///
public override void Send(SendOrPostCallback d, Object state)
{
_dispatcher.Invoke(DispatcherPriority.Normal, d, state);
}
///
/// Asynchronously invoke the callback in the SynchronizationContext.
///
public override void Post(SendOrPostCallback d, Object state)
{
_dispatcher.BeginInvoke(DispatcherPriority.Normal, d, state);
}
///
/// Wait for a set of handles.
///
///
/// Critical - Calls WaitForMultipleObjectsEx which has a SUC.
///
[SecurityCritical]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.ControlPolicy|SecurityPermissionFlag.ControlEvidence)]
public override int Wait(IntPtr[] waitHandles, bool waitAll, int millisecondsTimeout)
{
if(_dispatcher._disableProcessingCount > 0)
{
// Call into native code directly in order to avoid the default
// CLR locking behavior which pumps messages under contention.
// Even though they try to pump only the COM messages, any
// messages that have been SENT to the window are also
// dispatched. This can lead to unpredictable reentrancy.
return MS.Win32.UnsafeNativeMethods.WaitForMultipleObjectsEx(waitHandles.Length, waitHandles, waitAll, millisecondsTimeout, false);
}
else
{
return SynchronizationContext.WaitHelper(waitHandles, waitAll, millisecondsTimeout);
}
}
///
/// Create a copy of this SynchronizationContext.
///
public override SynchronizationContext CreateCopy()
{
DispatcherSynchronizationContext context = new DispatcherSynchronizationContext(_dispatcher);
return context;
}
internal Dispatcher _dispatcher;
}
}
// 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
- HexParser.cs
- HighContrastHelper.cs
- WebPartZoneCollection.cs
- RefreshEventArgs.cs
- HtmlInputControl.cs
- MatrixAnimationUsingPath.cs
- TcpClientChannel.cs
- ScopelessEnumAttribute.cs
- Clock.cs
- SelectionProcessor.cs
- HatchBrush.cs
- PreservationFileWriter.cs
- BitmapFrameEncode.cs
- IssuanceTokenProviderBase.cs
- MsmqIntegrationOutputChannel.cs
- _LoggingObject.cs
- ColorPalette.cs
- EntityStoreSchemaFilterEntry.cs
- RadialGradientBrush.cs
- WebHostScriptMappingsInstallComponent.cs
- Stopwatch.cs
- CultureInfoConverter.cs
- FlagsAttribute.cs
- Accessors.cs
- QuotaExceededException.cs
- InvalidOperationException.cs
- UTF8Encoding.cs
- SqlProviderManifest.cs
- PerformanceCounterPermissionAttribute.cs
- KnownTypes.cs
- FontWeightConverter.cs
- LiteralControl.cs
- TextPatternIdentifiers.cs
- RequestResizeEvent.cs
- ChangeDirector.cs
- PathFigureCollectionConverter.cs
- ColorContextHelper.cs
- BamlLocalizableResource.cs
- ReceiveSecurityHeaderElementManager.cs
- CharAnimationUsingKeyFrames.cs
- SystemTcpStatistics.cs
- XmlSchemaSimpleTypeRestriction.cs
- Codec.cs
- TraversalRequest.cs
- ShaderEffect.cs
- ListViewUpdatedEventArgs.cs
- SystemDiagnosticsSection.cs
- DocumentViewerAutomationPeer.cs
- SqlDataSourceView.cs
- RNGCryptoServiceProvider.cs
- RectValueSerializer.cs
- XPathEmptyIterator.cs
- DataGridViewCellCancelEventArgs.cs
- LambdaCompiler.Lambda.cs
- ReturnType.cs
- FixedSOMPageConstructor.cs
- MonitoringDescriptionAttribute.cs
- ValueOfAction.cs
- CreateUserWizard.cs
- ResXResourceWriter.cs
- WebProxyScriptElement.cs
- RadioButtonBaseAdapter.cs
- NativeMethods.cs
- InertiaRotationBehavior.cs
- CapabilitiesState.cs
- TextBoxAutomationPeer.cs
- LineUtil.cs
- ScriptingRoleServiceSection.cs
- ModuleConfigurationInfo.cs
- Rfc2898DeriveBytes.cs
- EventSinkHelperWriter.cs
- CodeStatementCollection.cs
- CodeIdentifiers.cs
- CodeSnippetExpression.cs
- HttpConfigurationContext.cs
- TextTreeDeleteContentUndoUnit.cs
- DefaultMemberAttribute.cs
- PerformanceCounterCategory.cs
- TailCallAnalyzer.cs
- CellTreeNodeVisitors.cs
- XmlSchemaParticle.cs
- LinqTreeNodeEvaluator.cs
- PostBackTrigger.cs
- TransactionsSectionGroup.cs
- FileSystemInfo.cs
- AlphabeticalEnumConverter.cs
- RectAnimationUsingKeyFrames.cs
- TokenizerHelper.cs
- ObjectStateManagerMetadata.cs
- AnnotationMap.cs
- PopOutPanel.cs
- TextRangeAdaptor.cs
- HiddenField.cs
- MeasureItemEvent.cs
- StrongNameIdentityPermission.cs
- ExpressionPrefixAttribute.cs
- CmsUtils.cs
- MessageQueueTransaction.cs
- EmptyStringExpandableObjectConverter.cs
- _HeaderInfo.cs