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
- BitmapEffectGroup.cs
- RawTextInputReport.cs
- XmlSignificantWhitespace.cs
- TempEnvironment.cs
- JsonMessageEncoderFactory.cs
- CorrelationHandle.cs
- Rfc2898DeriveBytes.cs
- FileUtil.cs
- TailCallAnalyzer.cs
- MultiByteCodec.cs
- InputScope.cs
- DataGridViewIntLinkedList.cs
- AuthenticatingEventArgs.cs
- BufferModesCollection.cs
- FileLogRecordStream.cs
- InternalConfigConfigurationFactory.cs
- Publisher.cs
- BaseTemplateCodeDomTreeGenerator.cs
- webproxy.cs
- Composition.cs
- CompositeActivityDesigner.cs
- GenerateScriptTypeAttribute.cs
- GridViewRowPresenter.cs
- ClaimSet.cs
- RightsManagementPermission.cs
- WindowShowOrOpenTracker.cs
- WebPartPersonalization.cs
- FileVersionInfo.cs
- PriorityChain.cs
- XmlSchema.cs
- SelectionRangeConverter.cs
- _HTTPDateParse.cs
- SiteMapPath.cs
- RowToFieldTransformer.cs
- NativeMethods.cs
- CryptoHelper.cs
- InfiniteTimeSpanConverter.cs
- PasswordPropertyTextAttribute.cs
- CodeSnippetStatement.cs
- NetMsmqBinding.cs
- FileDialog_Vista_Interop.cs
- MeasurementDCInfo.cs
- AppDomain.cs
- ZeroOpNode.cs
- WhileDesigner.cs
- UnknownBitmapDecoder.cs
- HttpListenerResponse.cs
- DataGridViewBindingCompleteEventArgs.cs
- SqlInternalConnectionSmi.cs
- TreeView.cs
- BoolExpression.cs
- DigestTraceRecordHelper.cs
- StylusTip.cs
- FocusTracker.cs
- StrictAndMessageFilter.cs
- CodeMethodInvokeExpression.cs
- WebPartEditVerb.cs
- IconConverter.cs
- SafeUserTokenHandle.cs
- EmbeddedMailObjectsCollection.cs
- Image.cs
- MembershipUser.cs
- StateRuntime.cs
- _NetworkingPerfCounters.cs
- TextRangeEditLists.cs
- ActiveXHelper.cs
- ProgressBar.cs
- CssTextWriter.cs
- PassportAuthentication.cs
- IdentityModelDictionary.cs
- FixedDSBuilder.cs
- BindingWorker.cs
- WaitingCursor.cs
- Size.cs
- NumericExpr.cs
- RecognitionResult.cs
- TextServicesCompartment.cs
- WorkflowMarkupSerializationProvider.cs
- PropertyMapper.cs
- XamlParser.cs
- sqlinternaltransaction.cs
- MediaContext.cs
- PersonalizationEntry.cs
- FindCriteriaApril2005.cs
- ReadOnlyCollectionBase.cs
- HtmlElement.cs
- StrongName.cs
- DataTableNameHandler.cs
- ByteStreamGeometryContext.cs
- DeferredElementTreeState.cs
- MediaSystem.cs
- EventMappingSettings.cs
- DataKey.cs
- DropDownButton.cs
- StylusLogic.cs
- StateMachine.cs
- SchemaObjectWriter.cs
- ResourceAttributes.cs
- HTTP_SERVICE_CONFIG_URLACL_KEY.cs
- UpdateCommand.cs