Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Base / System / Windows / Threading / DispatcherObject.cs / 1 / DispatcherObject.cs
using System;
using System.Windows;
using System.Threading;
using MS.Internal.WindowsBase; // FriendAccessAllowed
namespace System.Windows.Threading
{
///
/// A DispatcherObject is an object associated with a
/// . A DispatcherObject instance should
/// only be access by the dispatcher's thread.
///
///
/// Subclasses of should enforce thread
/// safety by calling on all their public
/// methods to ensure the calling thread is the appropriate thread.
///
/// DispatcherObject cannot be independently instantiated; that is,
/// all constructors are protected.
///
public abstract class DispatcherObject
{
///
/// Returns the that this
/// is associated with.
///
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
public Dispatcher Dispatcher
{
get
{
// This property is free-threaded.
return _dispatcher;
}
}
// This method allows certain derived classes to break the dispatcher affinity
// of our objects.
[FriendAccessAllowed] // Built into Base, also used by Framework.
internal void DetachFromDispatcher()
{
_dispatcher = null;
}
///
/// Checks that the calling thread has access to this object.
///
///
/// Only the dispatcher thread may access DispatcherObjects.
///
/// This method is public so that any thread can probe to
/// see if it has access to the DispatcherObject.
///
///
/// True if the calling thread has access to this object.
///
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public bool CheckAccess()
{
// This method is free-threaded.
bool accessAllowed = true;
Dispatcher dispatcher = _dispatcher;
// Note: a DispatcherObject that is not associated with a
// dispatcher is considered to be free-threaded.
if(dispatcher != null)
{
accessAllowed = dispatcher.CheckAccess();
}
return accessAllowed;
}
///
/// Verifies that the calling thread has access to this object.
///
///
/// Only the dispatcher thread may access DispatcherObjects.
///
/// This method is public so that derived classes can probe to
/// see if the calling thread has access to itself.
///
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void VerifyAccess()
{
// This method is free-threaded.
Dispatcher dispatcher = _dispatcher;
// Note: a DispatcherObject that is not associated with a
// dispatcher is considered to be free-threaded.
if(dispatcher != null)
{
dispatcher.VerifyAccess();
}
}
///
/// Instantiate this object associated with the current Dispatcher.
///
protected DispatcherObject()
{
_dispatcher = Dispatcher.CurrentDispatcher;
}
private Dispatcher _dispatcher;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Windows;
using System.Threading;
using MS.Internal.WindowsBase; // FriendAccessAllowed
namespace System.Windows.Threading
{
///
/// A DispatcherObject is an object associated with a
/// . A DispatcherObject instance should
/// only be access by the dispatcher's thread.
///
///
/// Subclasses of should enforce thread
/// safety by calling on all their public
/// methods to ensure the calling thread is the appropriate thread.
///
/// DispatcherObject cannot be independently instantiated; that is,
/// all constructors are protected.
///
public abstract class DispatcherObject
{
///
/// Returns the that this
/// is associated with.
///
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
public Dispatcher Dispatcher
{
get
{
// This property is free-threaded.
return _dispatcher;
}
}
// This method allows certain derived classes to break the dispatcher affinity
// of our objects.
[FriendAccessAllowed] // Built into Base, also used by Framework.
internal void DetachFromDispatcher()
{
_dispatcher = null;
}
///
/// Checks that the calling thread has access to this object.
///
///
/// Only the dispatcher thread may access DispatcherObjects.
///
/// This method is public so that any thread can probe to
/// see if it has access to the DispatcherObject.
///
///
/// True if the calling thread has access to this object.
///
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public bool CheckAccess()
{
// This method is free-threaded.
bool accessAllowed = true;
Dispatcher dispatcher = _dispatcher;
// Note: a DispatcherObject that is not associated with a
// dispatcher is considered to be free-threaded.
if(dispatcher != null)
{
accessAllowed = dispatcher.CheckAccess();
}
return accessAllowed;
}
///
/// Verifies that the calling thread has access to this object.
///
///
/// Only the dispatcher thread may access DispatcherObjects.
///
/// This method is public so that derived classes can probe to
/// see if the calling thread has access to itself.
///
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void VerifyAccess()
{
// This method is free-threaded.
Dispatcher dispatcher = _dispatcher;
// Note: a DispatcherObject that is not associated with a
// dispatcher is considered to be free-threaded.
if(dispatcher != null)
{
dispatcher.VerifyAccess();
}
}
///
/// Instantiate this object associated with the current Dispatcher.
///
protected DispatcherObject()
{
_dispatcher = Dispatcher.CurrentDispatcher;
}
private 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
- ControlCollection.cs
- ToolStripDropDownItem.cs
- Accessible.cs
- ReverseInheritProperty.cs
- TypeToArgumentTypeConverter.cs
- LinqDataSourceDisposeEventArgs.cs
- StringBuilder.cs
- ControlPropertyNameConverter.cs
- SeparatorAutomationPeer.cs
- ScriptBehaviorDescriptor.cs
- ListDataBindEventArgs.cs
- LeafCellTreeNode.cs
- ThicknessAnimation.cs
- HiddenField.cs
- KeyValueSerializer.cs
- BigInt.cs
- CatalogZoneBase.cs
- MdiWindowListItemConverter.cs
- Activation.cs
- xsdvalidator.cs
- NetworkInterface.cs
- MailBnfHelper.cs
- NavigationWindowAutomationPeer.cs
- XMLDiffLoader.cs
- AccessViolationException.cs
- MenuTracker.cs
- WebBrowserProgressChangedEventHandler.cs
- PageRanges.cs
- InternalConfigEventArgs.cs
- _StreamFramer.cs
- SqlXml.cs
- DataServiceHostWrapper.cs
- ReliableOutputConnection.cs
- StreamGeometry.cs
- TextParagraph.cs
- EventMetadata.cs
- TreeNodeEventArgs.cs
- TemplatePartAttribute.cs
- UrlAuthFailureHandler.cs
- NumberFunctions.cs
- SpellerInterop.cs
- MultiAsyncResult.cs
- DefinitionBase.cs
- WhitespaceRule.cs
- FactoryGenerator.cs
- ByteAnimationBase.cs
- SqlBuilder.cs
- DirectoryObjectSecurity.cs
- DateTimeOffsetAdapter.cs
- DescendantQuery.cs
- ImageListImageEditor.cs
- ButtonFieldBase.cs
- XmlRawWriterWrapper.cs
- DataGridParentRows.cs
- SvcMapFile.cs
- PropertyValueUIItem.cs
- CultureData.cs
- FieldBuilder.cs
- CodeCommentStatement.cs
- FormViewInsertedEventArgs.cs
- DependencyProperty.cs
- WindowsIdentity.cs
- AssemblyAssociatedContentFileAttribute.cs
- StreamInfo.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- FlowDocumentReader.cs
- TextSegment.cs
- PeerTransportListenAddressValidator.cs
- RowBinding.cs
- NameValuePermission.cs
- DataGridViewCellCancelEventArgs.cs
- DefaultSection.cs
- CompilerInfo.cs
- DoubleCollection.cs
- Size3DValueSerializer.cs
- WebScriptServiceHostFactory.cs
- LinkTarget.cs
- userdatakeys.cs
- SqlMethodAttribute.cs
- LocatorPart.cs
- QilChoice.cs
- GenericArgumentsUpdater.cs
- Point4DValueSerializer.cs
- HeaderUtility.cs
- FrameAutomationPeer.cs
- ListDictionary.cs
- WebServiceAttribute.cs
- RecordsAffectedEventArgs.cs
- NextPreviousPagerField.cs
- _TLSstream.cs
- XPathLexer.cs
- DbConnectionPoolIdentity.cs
- SafeNativeMethods.cs
- dtdvalidator.cs
- ZoneMembershipCondition.cs
- ButtonStandardAdapter.cs
- SplitterEvent.cs
- MenuItemStyleCollectionEditor.cs
- SimpleExpression.cs
- WebBrowserNavigatedEventHandler.cs