Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / System / Windows / Threading / DispatcherObject.cs / 1305600 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AddInIpcChannel.cs
- DecimalStorage.cs
- EmptyEnumerator.cs
- NamespaceDecl.cs
- LocalizedNameDescriptionPair.cs
- HtmlInputReset.cs
- InputLanguageManager.cs
- MsdtcClusterUtils.cs
- ConfigXmlText.cs
- PropVariant.cs
- ReturnValue.cs
- BamlLocalizabilityResolver.cs
- UxThemeWrapper.cs
- HttpCacheParams.cs
- TextAutomationPeer.cs
- ObjectReferenceStack.cs
- ClearTypeHintValidation.cs
- CompiledELinqQueryState.cs
- TransformGroup.cs
- TemplateBamlRecordReader.cs
- DesignerSelectionListAdapter.cs
- TableRow.cs
- GacUtil.cs
- TextFormatterContext.cs
- QilVisitor.cs
- SqlNodeAnnotation.cs
- ProjectionPruner.cs
- PreviewKeyDownEventArgs.cs
- OleDbRowUpdatingEvent.cs
- CaseKeyBox.ViewModel.cs
- PrintPageEvent.cs
- ReachObjectContext.cs
- SafeUserTokenHandle.cs
- ClientProxyGenerator.cs
- SqlWorkflowPersistenceService.cs
- ClientSettingsStore.cs
- SiteMembershipCondition.cs
- QueueAccessMode.cs
- IncrementalReadDecoders.cs
- OracleCommand.cs
- DrawingGroup.cs
- ScriptMethodAttribute.cs
- NonClientArea.cs
- VisualState.cs
- OdbcParameterCollection.cs
- DataSourceControlBuilder.cs
- IPipelineRuntime.cs
- UniqueEventHelper.cs
- TrackingMemoryStreamFactory.cs
- HandlerBase.cs
- HtmlMeta.cs
- PtsCache.cs
- UnsafeNativeMethods.cs
- ParameterBuilder.cs
- BuilderPropertyEntry.cs
- IdentifierCollection.cs
- COM2TypeInfoProcessor.cs
- OracleCommandBuilder.cs
- SrgsElementFactory.cs
- CryptoProvider.cs
- ListViewSortEventArgs.cs
- InternalPermissions.cs
- SqlDependency.cs
- ColumnResult.cs
- DataPointer.cs
- TokenFactoryCredential.cs
- DateTimeSerializationSection.cs
- RawKeyboardInputReport.cs
- BadImageFormatException.cs
- ConfigurationLocation.cs
- SharedStatics.cs
- AuthenticodeSignatureInformation.cs
- TreeChangeInfo.cs
- KeyValueConfigurationElement.cs
- EntityKey.cs
- MetafileHeader.cs
- Encoder.cs
- Variable.cs
- CodeAttributeArgument.cs
- CustomAttribute.cs
- ManagementOptions.cs
- GridViewColumnCollectionChangedEventArgs.cs
- EdmToObjectNamespaceMap.cs
- BindingOperations.cs
- ClickablePoint.cs
- MemberExpressionHelper.cs
- DefinitionUpdate.cs
- XsltArgumentList.cs
- GPPOINTF.cs
- XsltSettings.cs
- sitestring.cs
- ToolStripPanel.cs
- PageBreakRecord.cs
- UndoManager.cs
- AddInIpcChannel.cs
- PersistChildrenAttribute.cs
- SystemIcmpV4Statistics.cs
- TextTreeInsertElementUndoUnit.cs
- RequiredFieldValidator.cs
- CodeCatchClause.cs