Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / System / Windows / Threading / DispatcherSynchronizationContext.cs / 1407647 / 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() { // Because we do not contain any state that we want to preserve // in seperate instances, we just return the same synchronization // context. The CLR team assures us this is OK. return this; } 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
- AspNetCompatibilityRequirementsMode.cs
- RegexMatch.cs
- BamlLocalizabilityResolver.cs
- XmlBaseReader.cs
- AsyncSerializedWorker.cs
- AttributeCollection.cs
- BamlRecordHelper.cs
- EntityCollection.cs
- WindowsScroll.cs
- filewebresponse.cs
- IItemProperties.cs
- DataColumn.cs
- ByteStorage.cs
- TdsParameterSetter.cs
- NonVisualControlAttribute.cs
- RadioButtonList.cs
- ControlBuilder.cs
- SamlAuthenticationClaimResource.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- SimpleNameService.cs
- SchemaType.cs
- ExchangeUtilities.cs
- ClientScriptManager.cs
- SQLRoleProvider.cs
- OptimizedTemplateContent.cs
- HandlerWithFactory.cs
- ReadOnlyMetadataCollection.cs
- HttpListenerRequest.cs
- WebPartConnectionsConfigureVerb.cs
- StylusCaptureWithinProperty.cs
- Grant.cs
- WebEventCodes.cs
- CreateUserWizardAutoFormat.cs
- XmlSchemaImporter.cs
- TableRow.cs
- Size.cs
- TileBrush.cs
- GraphicsPath.cs
- LocalizableAttribute.cs
- MailMessageEventArgs.cs
- TrackingCondition.cs
- Matrix3DValueSerializer.cs
- FunctionImportMapping.cs
- TrackBarRenderer.cs
- PartitionResolver.cs
- OracleParameter.cs
- EndpointDiscoveryBehavior.cs
- RegexNode.cs
- DataGridHeaderBorder.cs
- TileBrush.cs
- MobileControlBuilder.cs
- GiveFeedbackEventArgs.cs
- ExtensionDataReader.cs
- ImageAnimator.cs
- GenericWebPart.cs
- Invariant.cs
- UserControlCodeDomTreeGenerator.cs
- DataException.cs
- PeerApplicationLaunchInfo.cs
- ChangeTracker.cs
- TitleStyle.cs
- InstanceLockTracking.cs
- GridViewRowCollection.cs
- ExtensibleClassFactory.cs
- MouseGestureConverter.cs
- ExpressionQuoter.cs
- MultiAsyncResult.cs
- HtmlInputRadioButton.cs
- StringStorage.cs
- HttpHandlerActionCollection.cs
- HttpRequestWrapper.cs
- UIElementAutomationPeer.cs
- EventListener.cs
- xmlsaver.cs
- Matrix3DConverter.cs
- AmbientProperties.cs
- DataConnectionHelper.cs
- DeferredElementTreeState.cs
- DeviceContext.cs
- BlurBitmapEffect.cs
- NativeMethods.cs
- DataGridViewImageCell.cs
- DataContext.cs
- DependencyPropertyHelper.cs
- DataGridViewEditingControlShowingEventArgs.cs
- DynamicPropertyReader.cs
- _NativeSSPI.cs
- Queue.cs
- PropertyGeneratedEventArgs.cs
- hebrewshape.cs
- MexTcpBindingCollectionElement.cs
- PropertyChangingEventArgs.cs
- AnnotationMap.cs
- ListBoxItemWrapperAutomationPeer.cs
- TextTrailingCharacterEllipsis.cs
- ApplicationException.cs
- _TransmitFileOverlappedAsyncResult.cs
- CustomTypeDescriptor.cs
- EntityTypeBase.cs
- SqlDataSourceQuery.cs