Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / 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. 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
- MaskDesignerDialog.cs
- BitStream.cs
- ExitEventArgs.cs
- MyContact.cs
- ParameterElementCollection.cs
- TagPrefixCollection.cs
- DataGridCommandEventArgs.cs
- FileSystemInfo.cs
- WindowsTooltip.cs
- ListViewEditEventArgs.cs
- DataSpaceManager.cs
- CompilerError.cs
- ConfigurationValidatorBase.cs
- BuildDependencySet.cs
- PageHandlerFactory.cs
- StringWriter.cs
- SoapHttpTransportImporter.cs
- AttributeData.cs
- OciEnlistContext.cs
- HandlerWithFactory.cs
- OdbcCommandBuilder.cs
- Canonicalizers.cs
- FacetDescription.cs
- XmlMessageFormatter.cs
- TimeStampChecker.cs
- XmlSchemaInferenceException.cs
- SpellCheck.cs
- DataTableReader.cs
- HttpRequestBase.cs
- Simplifier.cs
- DictionaryEntry.cs
- ExpressionValueEditor.cs
- StorageMappingItemLoader.cs
- Ref.cs
- Method.cs
- WebPartDescription.cs
- xmlglyphRunInfo.cs
- CopyNodeSetAction.cs
- WorkflowMarkupElementEventArgs.cs
- InternalMappingException.cs
- PrincipalPermissionMode.cs
- Animatable.cs
- ImageFormat.cs
- IriParsingElement.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- UnsafeNativeMethods.cs
- PageBuildProvider.cs
- DateTimeStorage.cs
- FormViewDeletedEventArgs.cs
- DateTimeUtil.cs
- Interlocked.cs
- ContentValidator.cs
- ObjectRef.cs
- StringWriter.cs
- FocusChangedEventArgs.cs
- BaseDataBoundControlDesigner.cs
- Expressions.cs
- RecognizerBase.cs
- TrackBarRenderer.cs
- DBCSCodePageEncoding.cs
- SafeIUnknown.cs
- SystemColors.cs
- Normalization.cs
- PreparingEnlistment.cs
- SqlInternalConnectionTds.cs
- Site.cs
- FixedSOMLineRanges.cs
- SqlGenerator.cs
- Vector3D.cs
- TypeHelpers.cs
- Margins.cs
- FocusTracker.cs
- MimeBasePart.cs
- StyleCollection.cs
- DrawListViewColumnHeaderEventArgs.cs
- SetterBase.cs
- ObsoleteAttribute.cs
- AppSettingsExpressionBuilder.cs
- ButtonChrome.cs
- TouchFrameEventArgs.cs
- ReadOnlyDataSource.cs
- DynamicEndpoint.cs
- DummyDataSource.cs
- GcHandle.cs
- SqlMetaData.cs
- AxHost.cs
- TableCell.cs
- WebPartAuthorizationEventArgs.cs
- VoiceSynthesis.cs
- FontFaceLayoutInfo.cs
- PointLightBase.cs
- PrimitiveXmlSerializers.cs
- AsyncResult.cs
- CharacterHit.cs
- RelationshipWrapper.cs
- ClientFormsIdentity.cs
- SQLGuid.cs
- DispatcherObject.cs
- CodeRegionDirective.cs
- DataGridViewBindingCompleteEventArgs.cs