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
- NonPrimarySelectionGlyph.cs
- mediapermission.cs
- BorderGapMaskConverter.cs
- ColumnHeaderConverter.cs
- ArrangedElementCollection.cs
- OletxTransactionManager.cs
- WebPartMenu.cs
- AutomationPatternInfo.cs
- IndicFontClient.cs
- OdbcParameter.cs
- IdentityHolder.cs
- SoundPlayerAction.cs
- DateTimeConverter.cs
- SymbolTable.cs
- Comparer.cs
- QueryExecutionOption.cs
- X509RawDataKeyIdentifierClause.cs
- wmiprovider.cs
- ElementHost.cs
- OleDbTransaction.cs
- StrokeCollectionConverter.cs
- ProgressiveCrcCalculatingStream.cs
- BaseDataBoundControl.cs
- Verify.cs
- PrintPreviewGraphics.cs
- AdornerDecorator.cs
- TitleStyle.cs
- SpellerError.cs
- CompositeCollectionView.cs
- CommonDialog.cs
- AuditLevel.cs
- ECDiffieHellman.cs
- HandlerMappingMemo.cs
- FileChangesMonitor.cs
- XmlBinaryReader.cs
- HttpPostedFile.cs
- DataServiceHostFactory.cs
- TTSEvent.cs
- WindowsScrollBar.cs
- OdbcStatementHandle.cs
- Relationship.cs
- CorrelationValidator.cs
- ComboBoxAutomationPeer.cs
- ChannelCacheSettings.cs
- HttpStreamMessageEncoderFactory.cs
- PageAction.cs
- SQLDouble.cs
- ToolboxService.cs
- GridViewSelectEventArgs.cs
- FileUtil.cs
- TypeElement.cs
- XmlNode.cs
- UnaryNode.cs
- MarkupExtensionReturnTypeAttribute.cs
- BeginEvent.cs
- GeneratedCodeAttribute.cs
- GifBitmapDecoder.cs
- WebMessageEncoderFactory.cs
- mongolianshape.cs
- BindingWorker.cs
- WebAdminConfigurationHelper.cs
- AddingNewEventArgs.cs
- SqlLiftWhereClauses.cs
- ObjectListDesigner.cs
- PaintValueEventArgs.cs
- PropertyInfoSet.cs
- ExecutionEngineException.cs
- DeclarativeCatalogPart.cs
- RepeatBehavior.cs
- RNGCryptoServiceProvider.cs
- SHA256Managed.cs
- VSDExceptions.cs
- TypeSource.cs
- MD5.cs
- PropertyBuilder.cs
- XmlIlTypeHelper.cs
- UpdateRecord.cs
- PointAnimation.cs
- AuthenticationService.cs
- SiteMapNodeItemEventArgs.cs
- DebugView.cs
- NavigationFailedEventArgs.cs
- StylusSystemGestureEventArgs.cs
- ListControlDesigner.cs
- ExpressionDumper.cs
- OleDbException.cs
- TextModifierScope.cs
- EntryIndex.cs
- IdentityModelStringsVersion1.cs
- PersonalizationProvider.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- Attributes.cs
- ReadContentAsBinaryHelper.cs
- ProtectedConfiguration.cs
- RemotingServices.cs
- PolyBezierSegmentFigureLogic.cs
- CriticalHandle.cs
- PasswordPropertyTextAttribute.cs
- MultipartIdentifier.cs
- Page.cs