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
- SafeCancelMibChangeNotify.cs
- AnnotationResourceCollection.cs
- LocatorPartList.cs
- UnionCodeGroup.cs
- ArgumentNullException.cs
- PagesChangedEventArgs.cs
- TextEditorTables.cs
- StringHandle.cs
- DescriptionAttribute.cs
- CodeNamespaceCollection.cs
- MetabaseServerConfig.cs
- SqlInfoMessageEvent.cs
- CodeArrayCreateExpression.cs
- MetaModel.cs
- UIntPtr.cs
- DirtyTextRange.cs
- ping.cs
- DeviceSpecific.cs
- DEREncoding.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- SecurityTokenException.cs
- DictionarySectionHandler.cs
- ComboBoxItem.cs
- HtmlInputReset.cs
- HtmlElement.cs
- ListViewItem.cs
- lengthconverter.cs
- FormDesigner.cs
- SqlRecordBuffer.cs
- CompositeDataBoundControl.cs
- AddressingProperty.cs
- OdbcConnectionString.cs
- Atom10FormatterFactory.cs
- MatrixCamera.cs
- ZeroOpNode.cs
- FrameworkTextComposition.cs
- ProcessInfo.cs
- VolatileEnlistmentMultiplexing.cs
- InkCanvasInnerCanvas.cs
- TableRow.cs
- ExpandedWrapper.cs
- WebPartZoneBase.cs
- TypeEnumerableViewSchema.cs
- IntSumAggregationOperator.cs
- ConfigXmlText.cs
- SymbolPair.cs
- XhtmlConformanceSection.cs
- WindowsAuthenticationModule.cs
- TextureBrush.cs
- HwndProxyElementProvider.cs
- PageCache.cs
- CursorConverter.cs
- TextServicesCompartmentEventSink.cs
- X509Certificate2Collection.cs
- AsymmetricKeyExchangeDeformatter.cs
- ForwardPositionQuery.cs
- QueryResults.cs
- Brush.cs
- UserPreferenceChangedEventArgs.cs
- DocumentXPathNavigator.cs
- ToolStripTextBox.cs
- OdbcTransaction.cs
- CqlLexer.cs
- NullableLongAverageAggregationOperator.cs
- NullExtension.cs
- FastEncoderWindow.cs
- AttributeAction.cs
- Int64Converter.cs
- AutomationPropertyInfo.cs
- PrivilegeNotHeldException.cs
- TypePropertyEditor.cs
- CheckBoxStandardAdapter.cs
- ThicknessKeyFrameCollection.cs
- ObjectReferenceStack.cs
- EventSinkHelperWriter.cs
- DataRecordObjectView.cs
- ProgressBarBrushConverter.cs
- MatrixAnimationUsingKeyFrames.cs
- ColorConvertedBitmapExtension.cs
- ObjectListComponentEditor.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- CopyNodeSetAction.cs
- WebPermission.cs
- EndpointAddress.cs
- CqlQuery.cs
- RegexWriter.cs
- TableColumnCollectionInternal.cs
- CornerRadiusConverter.cs
- TimeSpanFormat.cs
- CodeObjectCreateExpression.cs
- HtmlCommandAdapter.cs
- CqlIdentifiers.cs
- Int16Animation.cs
- EdmValidator.cs
- SchemaHelper.cs
- UseManagedPresentationBindingElement.cs
- SqlTypeConverter.cs
- OutputCacheSettings.cs
- HyperLinkStyle.cs
- TextCharacters.cs