Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Base / System / Windows / Interop / ComponentDispatcherThread.cs / 1 / ComponentDispatcherThread.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using System;
using MS.Win32;
using System.Globalization;
using System.Security;
using System.Security.Permissions;
using MS.Internal.WindowsBase;
namespace System.Windows.Interop
{
///
/// This is a class used to implement per-thread instance of the ComponentDispatcher.
///
internal class ComponentDispatcherThread
{
///
/// Returns true if one or more components has gone modal.
/// Although once one component is modal a 2nd shouldn't.
///
public bool IsThreadModal
{
get
{
return (_modalCount > 0);
}
}
///
/// Returns "current" message. More exactly the last MSG Raised.
///
///
/// Critical: This is blocked off as defense in depth to avoid leaking message information
///
public MSG CurrentKeyboardMessage
{
[SecurityCritical]
get
{
return _currentKeyboardMSG;
}
[SecurityCritical]
set
{
_currentKeyboardMSG = value;
}
}
///
/// A component calls this to go modal. Current thread wide only.
///
///
/// Critical: This is blocked off as defense in depth
///
[SecurityCritical]
public void PushModal()
{
_modalCount += 1;
if(1 == _modalCount)
{
if(null != _enterThreadModal)
_enterThreadModal(null, EventArgs.Empty);
}
}
///
/// A component calls this to end being modal.
///
///
/// Critical: This is blocked off as defense in depth to avoid tampering with input
///
[SecurityCritical]
public void PopModal()
{
_modalCount -= 1;
if(0 == _modalCount)
{
if(null != _leaveThreadModal)
_leaveThreadModal(null, EventArgs.Empty);
}
if(_modalCount < 0)
_modalCount = 0; // Throwing is also good
}
///
/// The message loop pumper calls this when it is time to do idle processing.
///
///
/// Critical: This is blocked off as defense in depth
///
[SecurityCritical]
public void RaiseIdle()
{
if(null != _threadIdle)
_threadIdle(null, EventArgs.Empty);
}
///
/// The message loop pumper calls this for every keyboard message.
///
///
/// Critical: This is blocked off as defense in depth to prevent message leakage
///
[SecurityCritical]
public bool RaiseThreadMessage(ref MSG msg)
{
bool handled=false;
if(null != _threadFilterMessage)
_threadFilterMessage(ref msg, ref handled);
if(handled)
return handled;
if(null != _threadPreprocessMessage)
_threadPreprocessMessage(ref msg, ref handled);
return handled;
}
///
/// Components register delegates with this event to handle
/// thread idle processing.
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event EventHandler ThreadIdle
{
[SecurityCritical]
add
{
_threadIdle += value;
}
[SecurityCritical]
remove
{
_threadIdle -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event EventHandler _threadIdle;
///
/// Components register delegates with this event to handle
/// Keyboard Messages (first chance processing).
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event ThreadMessageEventHandler ThreadFilterMessage
{
[SecurityCritical]
add
{
_threadFilterMessage += value;
}
[SecurityCritical]
remove
{
_threadFilterMessage -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event ThreadMessageEventHandler _threadFilterMessage;
///
/// Components register delegates with this event to handle
/// Keyboard Messages (second chance processing).
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event ThreadMessageEventHandler ThreadPreprocessMessage
{
[SecurityCritical]
add
{
_threadPreprocessMessage += value;
}
[SecurityCritical]
remove
{
_threadPreprocessMessage -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event ThreadMessageEventHandler _threadPreprocessMessage;
///
/// Components register delegates with this event to handle
/// a component on this thread has "gone modal", when previously none were.
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event EventHandler EnterThreadModal
{
[SecurityCritical]
add
{
_enterThreadModal += value;
}
[SecurityCritical]
remove
{
_enterThreadModal -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event EventHandler _enterThreadModal;
///
/// Components register delegates with this event to handle
/// all components on this thread are done being modal.
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event EventHandler LeaveThreadModal
{
[SecurityCritical]
add
{
_leaveThreadModal += value;
}
[SecurityCritical]
remove
{
_leaveThreadModal -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event EventHandler _leaveThreadModal;
private int _modalCount;
///
/// Critical: This holds the last message that was recieved
///
[SecurityCritical]
private MSG _currentKeyboardMSG;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using System;
using MS.Win32;
using System.Globalization;
using System.Security;
using System.Security.Permissions;
using MS.Internal.WindowsBase;
namespace System.Windows.Interop
{
///
/// This is a class used to implement per-thread instance of the ComponentDispatcher.
///
internal class ComponentDispatcherThread
{
///
/// Returns true if one or more components has gone modal.
/// Although once one component is modal a 2nd shouldn't.
///
public bool IsThreadModal
{
get
{
return (_modalCount > 0);
}
}
///
/// Returns "current" message. More exactly the last MSG Raised.
///
///
/// Critical: This is blocked off as defense in depth to avoid leaking message information
///
public MSG CurrentKeyboardMessage
{
[SecurityCritical]
get
{
return _currentKeyboardMSG;
}
[SecurityCritical]
set
{
_currentKeyboardMSG = value;
}
}
///
/// A component calls this to go modal. Current thread wide only.
///
///
/// Critical: This is blocked off as defense in depth
///
[SecurityCritical]
public void PushModal()
{
_modalCount += 1;
if(1 == _modalCount)
{
if(null != _enterThreadModal)
_enterThreadModal(null, EventArgs.Empty);
}
}
///
/// A component calls this to end being modal.
///
///
/// Critical: This is blocked off as defense in depth to avoid tampering with input
///
[SecurityCritical]
public void PopModal()
{
_modalCount -= 1;
if(0 == _modalCount)
{
if(null != _leaveThreadModal)
_leaveThreadModal(null, EventArgs.Empty);
}
if(_modalCount < 0)
_modalCount = 0; // Throwing is also good
}
///
/// The message loop pumper calls this when it is time to do idle processing.
///
///
/// Critical: This is blocked off as defense in depth
///
[SecurityCritical]
public void RaiseIdle()
{
if(null != _threadIdle)
_threadIdle(null, EventArgs.Empty);
}
///
/// The message loop pumper calls this for every keyboard message.
///
///
/// Critical: This is blocked off as defense in depth to prevent message leakage
///
[SecurityCritical]
public bool RaiseThreadMessage(ref MSG msg)
{
bool handled=false;
if(null != _threadFilterMessage)
_threadFilterMessage(ref msg, ref handled);
if(handled)
return handled;
if(null != _threadPreprocessMessage)
_threadPreprocessMessage(ref msg, ref handled);
return handled;
}
///
/// Components register delegates with this event to handle
/// thread idle processing.
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event EventHandler ThreadIdle
{
[SecurityCritical]
add
{
_threadIdle += value;
}
[SecurityCritical]
remove
{
_threadIdle -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event EventHandler _threadIdle;
///
/// Components register delegates with this event to handle
/// Keyboard Messages (first chance processing).
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event ThreadMessageEventHandler ThreadFilterMessage
{
[SecurityCritical]
add
{
_threadFilterMessage += value;
}
[SecurityCritical]
remove
{
_threadFilterMessage -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event ThreadMessageEventHandler _threadFilterMessage;
///
/// Components register delegates with this event to handle
/// Keyboard Messages (second chance processing).
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event ThreadMessageEventHandler ThreadPreprocessMessage
{
[SecurityCritical]
add
{
_threadPreprocessMessage += value;
}
[SecurityCritical]
remove
{
_threadPreprocessMessage -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event ThreadMessageEventHandler _threadPreprocessMessage;
///
/// Components register delegates with this event to handle
/// a component on this thread has "gone modal", when previously none were.
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event EventHandler EnterThreadModal
{
[SecurityCritical]
add
{
_enterThreadModal += value;
}
[SecurityCritical]
remove
{
_enterThreadModal -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event EventHandler _enterThreadModal;
///
/// Components register delegates with this event to handle
/// all components on this thread are done being modal.
///
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
public event EventHandler LeaveThreadModal
{
[SecurityCritical]
add
{
_leaveThreadModal += value;
}
[SecurityCritical]
remove
{
_leaveThreadModal -= value;
}
}
///
/// Critical: This is blocked off as defense in depth and is used to transmit input related information
///
[SecurityCritical]
private event EventHandler _leaveThreadModal;
private int _modalCount;
///
/// Critical: This holds the last message that was recieved
///
[SecurityCritical]
private MSG _currentKeyboardMSG;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CaseStatementSlot.cs
- ProjectionPruner.cs
- DataKeyCollection.cs
- StringKeyFrameCollection.cs
- PropertyValueChangedEvent.cs
- OdbcEnvironmentHandle.cs
- CompilationSection.cs
- ProtocolViolationException.cs
- ProxyGenerator.cs
- PriorityItem.cs
- FieldCollectionEditor.cs
- DateTimePicker.cs
- TableRowCollection.cs
- HttpCapabilitiesEvaluator.cs
- EditorBrowsableAttribute.cs
- MimeTypeAttribute.cs
- XmlILModule.cs
- ObjectTag.cs
- UInt32Converter.cs
- ContractMapping.cs
- Transactions.cs
- DateTimeOffset.cs
- XmlnsDictionary.cs
- ObjectDataSourceFilteringEventArgs.cs
- DragDeltaEventArgs.cs
- DataGridTextBoxColumn.cs
- Vector.cs
- XmlParserContext.cs
- InvokeMemberBinder.cs
- HwndHost.cs
- XmlSchemaComplexContent.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- EllipticalNodeOperations.cs
- InternalRelationshipCollection.cs
- Compensation.cs
- Monitor.cs
- OleDbReferenceCollection.cs
- TTSVoice.cs
- BamlVersionHeader.cs
- XmlSchemaExporter.cs
- SqlDependencyListener.cs
- DebugView.cs
- EntityFrameworkVersions.cs
- ConditionedDesigner.cs
- DiagnosticEventProvider.cs
- RemoveStoryboard.cs
- Helper.cs
- DBAsyncResult.cs
- Registry.cs
- Matrix.cs
- SuppressIldasmAttribute.cs
- SubMenuStyleCollection.cs
- WebPartDescriptionCollection.cs
- GeneralTransform3DTo2DTo3D.cs
- ChangePassword.cs
- CodeGroup.cs
- Comparer.cs
- WebPartCatalogAddVerb.cs
- WithParamAction.cs
- SystemResourceHost.cs
- Header.cs
- XmlLoader.cs
- FontCacheUtil.cs
- storepermissionattribute.cs
- DateTimeOffsetAdapter.cs
- WebAdminConfigurationHelper.cs
- GeneralTransformCollection.cs
- SqlParameter.cs
- ScalarOps.cs
- IndexObject.cs
- PathStreamGeometryContext.cs
- XhtmlBasicControlAdapter.cs
- ContainerAction.cs
- InputLanguageCollection.cs
- TrackPointCollection.cs
- DiscoveryReference.cs
- FieldCollectionEditor.cs
- DataGrid.cs
- OleDbFactory.cs
- ButtonField.cs
- LicFileLicenseProvider.cs
- TerminatorSinks.cs
- AutomationPropertyInfo.cs
- InkCanvasFeedbackAdorner.cs
- ConfigXmlWhitespace.cs
- ThreadStaticAttribute.cs
- StatusBar.cs
- XmlSchemaValidationException.cs
- MdiWindowListStrip.cs
- ToolStripStatusLabel.cs
- SqlBulkCopyColumnMappingCollection.cs
- GraphicsState.cs
- PeerNameRecord.cs
- Range.cs
- DocumentViewer.cs
- CroppedBitmap.cs
- ADRoleFactory.cs
- XmlSchemaSimpleType.cs
- OptimalTextSource.cs
- DirectionalLight.cs