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
- PeerValidationBehavior.cs
- HtmlProps.cs
- WebPartDisplayMode.cs
- EmissiveMaterial.cs
- OleDbError.cs
- Cloud.cs
- Variant.cs
- MetafileHeaderEmf.cs
- DataGrid.cs
- TreeNode.cs
- Delegate.cs
- BindStream.cs
- HttpAsyncResult.cs
- QueryPageSettingsEventArgs.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ToolBarOverflowPanel.cs
- SettingsProperty.cs
- UriTemplatePathPartiallyEquivalentSet.cs
- XmlSchemaSimpleTypeList.cs
- TextFindEngine.cs
- XmlException.cs
- SectionInput.cs
- RootAction.cs
- RefreshPropertiesAttribute.cs
- WpfGeneratedKnownTypes.cs
- OverflowException.cs
- ObjectListDesigner.cs
- PreviousTrackingServiceAttribute.cs
- RIPEMD160.cs
- ClientRoleProvider.cs
- RecognizerInfo.cs
- keycontainerpermission.cs
- HttpTransportSecurity.cs
- PortCache.cs
- AccessedThroughPropertyAttribute.cs
- DelegatingMessage.cs
- altserialization.cs
- cookiecollection.cs
- DynamicHyperLink.cs
- DescendantQuery.cs
- MSHTMLHost.cs
- EntityEntry.cs
- SHA512CryptoServiceProvider.cs
- OdbcConnectionString.cs
- ListViewDataItem.cs
- ToolboxItem.cs
- DbUpdateCommandTree.cs
- TlsnegoTokenProvider.cs
- MsmqAuthenticationMode.cs
- EventLogEntryCollection.cs
- WebPartEditVerb.cs
- OdbcException.cs
- MailSettingsSection.cs
- DataGridViewColumnConverter.cs
- cookie.cs
- WsdlBuildProvider.cs
- SymbolEqualComparer.cs
- RegistryKey.cs
- ZipArchive.cs
- DbConnectionOptions.cs
- ClientReliableChannelBinder.cs
- FrameworkReadOnlyPropertyMetadata.cs
- TabPage.cs
- PeerChannelListener.cs
- CharAnimationBase.cs
- CommandField.cs
- MultipleViewPatternIdentifiers.cs
- HttpCacheParams.cs
- RootProfilePropertySettingsCollection.cs
- wmiprovider.cs
- _RequestLifetimeSetter.cs
- ConsumerConnectionPointCollection.cs
- securitycriticaldataClass.cs
- WebPartMenu.cs
- BufferedWebEventProvider.cs
- DictionaryTraceRecord.cs
- EmptyQuery.cs
- EncryptedHeaderXml.cs
- HttpCachePolicyWrapper.cs
- DocumentScope.cs
- TextDecorations.cs
- MemoryMappedFile.cs
- SecureConversationDriver.cs
- ScriptingProfileServiceSection.cs
- XPathMultyIterator.cs
- OpCellTreeNode.cs
- XmlTextReaderImpl.cs
- InputReport.cs
- XmlRawWriterWrapper.cs
- IteratorFilter.cs
- HttpResponseMessageProperty.cs
- FileSecurity.cs
- EventLogTraceListener.cs
- GridViewHeaderRowPresenter.cs
- DynamicILGenerator.cs
- ValidationErrorCollection.cs
- COM2Enum.cs
- PathGradientBrush.cs
- RoutedPropertyChangedEventArgs.cs
- ObjectIDGenerator.cs