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
- ResourceProviderFactory.cs
- TimelineCollection.cs
- MouseGesture.cs
- CellLabel.cs
- ClientFormsAuthenticationCredentials.cs
- wmiutil.cs
- Menu.cs
- UntrustedRecipientException.cs
- AdapterUtil.cs
- CollectionsUtil.cs
- PageEventArgs.cs
- XmlFormatExtensionPrefixAttribute.cs
- TokenBasedSet.cs
- ApplyImportsAction.cs
- DbExpressionRules.cs
- CodeStatement.cs
- DataGridViewRowCollection.cs
- SafeWaitHandle.cs
- ServiceOperationParameter.cs
- TreeViewEvent.cs
- ProtocolsConfiguration.cs
- WindowsSolidBrush.cs
- StateMachine.cs
- OperatingSystem.cs
- ToolZone.cs
- _NetRes.cs
- Pen.cs
- WizardForm.cs
- GeneralTransform2DTo3DTo2D.cs
- FloaterParaClient.cs
- FontSourceCollection.cs
- CodeTypeReferenceExpression.cs
- EntityViewContainer.cs
- TagPrefixInfo.cs
- DataTable.cs
- ColumnMapVisitor.cs
- SqlIdentifier.cs
- LicenseProviderAttribute.cs
- GradientPanel.cs
- DataGridViewSelectedColumnCollection.cs
- Int32CollectionConverter.cs
- WebPartEditorCancelVerb.cs
- ImageCollectionEditor.cs
- ThreadExceptionEvent.cs
- RelativeSource.cs
- IntegerFacetDescriptionElement.cs
- SafeArrayTypeMismatchException.cs
- TextViewSelectionProcessor.cs
- UiaCoreProviderApi.cs
- FrameAutomationPeer.cs
- TabControl.cs
- ContainerCodeDomSerializer.cs
- XmlSchemaSimpleContentRestriction.cs
- HtmlImage.cs
- ListViewAutomationPeer.cs
- WorkflowViewManager.cs
- WorkflowControlClient.cs
- CharUnicodeInfo.cs
- FamilyCollection.cs
- SynchronizedInputProviderWrapper.cs
- SByte.cs
- PenCursorManager.cs
- SqlFormatter.cs
- ContentTextAutomationPeer.cs
- ActivityCollectionMarkupSerializer.cs
- AccessViolationException.cs
- InstanceContextManager.cs
- SingleConverter.cs
- SqlCacheDependency.cs
- LoginCancelEventArgs.cs
- ReadOnlyCollectionBase.cs
- AppSettingsReader.cs
- WebBrowserProgressChangedEventHandler.cs
- TableSectionStyle.cs
- OdbcUtils.cs
- RepeaterItemEventArgs.cs
- GroupItem.cs
- FrameworkObject.cs
- FamilyMapCollection.cs
- RawStylusSystemGestureInputReport.cs
- QilScopedVisitor.cs
- CodeCompiler.cs
- OdbcDataAdapter.cs
- PersonalizationProvider.cs
- EncoderFallback.cs
- MethodBuilder.cs
- DataGridViewCellParsingEventArgs.cs
- BmpBitmapEncoder.cs
- SqlCachedBuffer.cs
- ColorConvertedBitmapExtension.cs
- NetworkInformationException.cs
- ActivityDesignerAccessibleObject.cs
- AmbientProperties.cs
- Operator.cs
- HeaderedItemsControl.cs
- BitmapFrameEncode.cs
- WebServiceErrorEvent.cs
- DigitalSignatureProvider.cs
- IndependentAnimationStorage.cs
- ToolStripOverflow.cs