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
- SymbolMethod.cs
- JournalNavigationScope.cs
- Rect3D.cs
- ParseHttpDate.cs
- RoutedEventHandlerInfo.cs
- ObjectViewFactory.cs
- ServerProtocol.cs
- ConnectorSelectionGlyph.cs
- TextSegment.cs
- DefaultValidator.cs
- SystemResources.cs
- CompositeActivityTypeDescriptorProvider.cs
- DependencyObjectPropertyDescriptor.cs
- TrackingCondition.cs
- DataBindingList.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- URI.cs
- TraceEventCache.cs
- RequestQueryParser.cs
- CodeExpressionCollection.cs
- TeredoHelper.cs
- ToolStripDropDownClosingEventArgs.cs
- DbDataReader.cs
- PathTooLongException.cs
- InfoCardArgumentException.cs
- DataServiceBuildProvider.cs
- COM2ColorConverter.cs
- OleDbReferenceCollection.cs
- EnvelopedSignatureTransform.cs
- BooleanAnimationUsingKeyFrames.cs
- MultiPartWriter.cs
- RectAnimationUsingKeyFrames.cs
- UnmanagedHandle.cs
- EpmContentSerializer.cs
- TextDecorations.cs
- WebResourceAttribute.cs
- TextAutomationPeer.cs
- SmtpTransport.cs
- RepeaterDesigner.cs
- Menu.cs
- ExpandCollapseProviderWrapper.cs
- Events.cs
- DataRelationPropertyDescriptor.cs
- SmtpAuthenticationManager.cs
- NGCSerializationManager.cs
- BamlLocalizabilityResolver.cs
- CompilationRelaxations.cs
- FontStretches.cs
- ReadOnlyPropertyMetadata.cs
- PointConverter.cs
- PriorityBindingExpression.cs
- ConnectionStringsExpressionBuilder.cs
- RolePrincipal.cs
- FlowDocumentPage.cs
- HideDisabledControlAdapter.cs
- AutomationPatternInfo.cs
- TextBoxRenderer.cs
- DataGridViewMethods.cs
- SqlDataSourceEnumerator.cs
- Pipe.cs
- DoubleAverageAggregationOperator.cs
- AvTrace.cs
- RuleSettingsCollection.cs
- DebugInfo.cs
- Padding.cs
- QueryMath.cs
- XmlSchemaExporter.cs
- ContainerSelectorGlyph.cs
- TrackPointCollection.cs
- HandlerBase.cs
- CompositeScriptReferenceEventArgs.cs
- OleDbRowUpdatedEvent.cs
- CombinedGeometry.cs
- IProvider.cs
- DataSourceBooleanViewSchemaConverter.cs
- TripleDES.cs
- Vector3DAnimation.cs
- TrackBarDesigner.cs
- ApplicationInterop.cs
- MessageQueuePermissionAttribute.cs
- odbcmetadatafactory.cs
- EnumerableWrapperWeakToStrong.cs
- ServiceNameElement.cs
- PublishLicense.cs
- OneToOneMappingSerializer.cs
- SqlSelectClauseBuilder.cs
- SizeFConverter.cs
- TextEditorLists.cs
- WorkflowQueueInfo.cs
- CodeAttachEventStatement.cs
- ErrorWrapper.cs
- PermissionRequestEvidence.cs
- BrowserPolicyValidator.cs
- ImageButton.cs
- ImageCreator.cs
- TreeNodeStyleCollection.cs
- CompressionTransform.cs
- EditorPartChrome.cs
- PageContentCollection.cs
- DrawingContextWalker.cs