Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / System / Windows / Threading / DispatcherFrame.cs / 1 / DispatcherFrame.cs
using System; using System.Security; namespace System.Windows.Threading { ////// Representation of Dispatcher frame. /// public class DispatcherFrame : DispatcherObject { ////// Critical: This code exists to ensure that the static variables initialized /// do not cause security violations.The reason this comes into existance is because /// of the call to RegisterWindowMessage /// TreatAsSafe:This is safe to call /// [SecurityCritical,SecurityTreatAsSafe] static DispatcherFrame() { } ////// Constructs a new instance of the DispatcherFrame class. /// public DispatcherFrame() : this(true) { } ////// Constructs a new instance of the DispatcherFrame class. /// /// /// Indicates whether or not this frame will exit when all frames /// are requested to exit. /// /// Dispatcher frames typically break down into two categories: /// 1) Long running, general purpose frames, that exit only when /// told to. These frames should exit when requested. /// 2) Short running, very specific frames that exit themselves /// when an important criteria is met. These frames may /// consider not exiting when requested in favor of waiting /// for their important criteria to be met. These frames /// should have a timeout associated with them. /// public DispatcherFrame(bool exitWhenRequested) { _exitWhenRequested = exitWhenRequested; _continue = true; } ////// Indicates that this dispatcher frame should exit. /// ////// Critical - calls a critical method - postThreadMessage. /// PublicOK - all we're doing is posting a current message to our thread. /// net effect is the dispatcher "wakes up" /// and uses the continue flag ( which may have just changed). /// public bool Continue { get { // This method is free-threaded. // First check if this frame wants to continue. bool shouldContinue = _continue; if(shouldContinue) { // This frame wants to continue, so next check if it will // respect the "exit requests" from the dispatcher. if(_exitWhenRequested) { Dispatcher dispatcher = Dispatcher; // This frame is willing to respect the "exit requests" of // the dispatcher, so check them. if(dispatcher._exitAllFrames || dispatcher._hasShutdownStarted) { shouldContinue = false; } } } return shouldContinue; } [SecurityCritical] set { // This method is free-threaded. _continue = value; // Post a message so that the message pump will wake up and // check our continue state. Dispatcher.BeginInvoke(DispatcherPriority.Send, (DispatcherOperationCallback) delegate(object unused) {return null;}, null); } } private bool _exitWhenRequested; private bool _continue; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Security; namespace System.Windows.Threading { ////// Representation of Dispatcher frame. /// public class DispatcherFrame : DispatcherObject { ////// Critical: This code exists to ensure that the static variables initialized /// do not cause security violations.The reason this comes into existance is because /// of the call to RegisterWindowMessage /// TreatAsSafe:This is safe to call /// [SecurityCritical,SecurityTreatAsSafe] static DispatcherFrame() { } ////// Constructs a new instance of the DispatcherFrame class. /// public DispatcherFrame() : this(true) { } ////// Constructs a new instance of the DispatcherFrame class. /// /// /// Indicates whether or not this frame will exit when all frames /// are requested to exit. /// /// Dispatcher frames typically break down into two categories: /// 1) Long running, general purpose frames, that exit only when /// told to. These frames should exit when requested. /// 2) Short running, very specific frames that exit themselves /// when an important criteria is met. These frames may /// consider not exiting when requested in favor of waiting /// for their important criteria to be met. These frames /// should have a timeout associated with them. /// public DispatcherFrame(bool exitWhenRequested) { _exitWhenRequested = exitWhenRequested; _continue = true; } ////// Indicates that this dispatcher frame should exit. /// ////// Critical - calls a critical method - postThreadMessage. /// PublicOK - all we're doing is posting a current message to our thread. /// net effect is the dispatcher "wakes up" /// and uses the continue flag ( which may have just changed). /// public bool Continue { get { // This method is free-threaded. // First check if this frame wants to continue. bool shouldContinue = _continue; if(shouldContinue) { // This frame wants to continue, so next check if it will // respect the "exit requests" from the dispatcher. if(_exitWhenRequested) { Dispatcher dispatcher = Dispatcher; // This frame is willing to respect the "exit requests" of // the dispatcher, so check them. if(dispatcher._exitAllFrames || dispatcher._hasShutdownStarted) { shouldContinue = false; } } } return shouldContinue; } [SecurityCritical] set { // This method is free-threaded. _continue = value; // Post a message so that the message pump will wake up and // check our continue state. Dispatcher.BeginInvoke(DispatcherPriority.Send, (DispatcherOperationCallback) delegate(object unused) {return null;}, null); } } private bool _exitWhenRequested; private bool _continue; } } // 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
- FilterQueryOptionExpression.cs
- OracleBoolean.cs
- Attributes.cs
- OdbcTransaction.cs
- DataBinder.cs
- MetadataSet.cs
- ObjectCloneHelper.cs
- StreamReader.cs
- InputReportEventArgs.cs
- LayoutManager.cs
- Missing.cs
- HandlerMappingMemo.cs
- ReversePositionQuery.cs
- EventPropertyMap.cs
- ClientUtils.cs
- XmlReflectionMember.cs
- XmlDataProvider.cs
- XmlCountingReader.cs
- Divide.cs
- CodeMemberProperty.cs
- MembershipValidatePasswordEventArgs.cs
- TextBlockAutomationPeer.cs
- ObjectDataSourceDisposingEventArgs.cs
- CursorConverter.cs
- StatusBarAutomationPeer.cs
- ObjectDataSourceMethodEventArgs.cs
- TreeChangeInfo.cs
- FixedSOMPageElement.cs
- ZipIOLocalFileBlock.cs
- HttpValueCollection.cs
- IntSecurity.cs
- PrintEvent.cs
- EntityCollection.cs
- DocumentAutomationPeer.cs
- MultiView.cs
- MouseGestureConverter.cs
- TextTreeText.cs
- FileSystemEventArgs.cs
- WebServiceHost.cs
- RecordBuilder.cs
- ArgumentOutOfRangeException.cs
- XmlQueryType.cs
- AuthenticationConfig.cs
- TdsParserSafeHandles.cs
- AnonymousIdentificationSection.cs
- TableLayoutRowStyleCollection.cs
- SqlUserDefinedAggregateAttribute.cs
- DataSourceGeneratorException.cs
- XmlSchemaProviderAttribute.cs
- DirectoryInfo.cs
- DataBoundControlHelper.cs
- DataSourceProvider.cs
- XmlRawWriterWrapper.cs
- QueryReaderSettings.cs
- StreamReader.cs
- InternalBufferOverflowException.cs
- EncoderExceptionFallback.cs
- TextFormatterContext.cs
- OdbcRowUpdatingEvent.cs
- DoubleStorage.cs
- StrokeNodeOperations.cs
- AgileSafeNativeMemoryHandle.cs
- ContainerParagraph.cs
- AssemblyAssociatedContentFileAttribute.cs
- XmlCharCheckingReader.cs
- IncrementalHitTester.cs
- StateMachineSubscriptionManager.cs
- XmlSchemaInferenceException.cs
- LinkUtilities.cs
- ApplicationDirectoryMembershipCondition.cs
- WorkflowApplicationEventArgs.cs
- CodePrimitiveExpression.cs
- AsyncContentLoadedEventArgs.cs
- InternalPolicyElement.cs
- MetricEntry.cs
- SmtpTransport.cs
- SmiMetaData.cs
- KnownTypesHelper.cs
- QueryOpcode.cs
- TypeDependencyAttribute.cs
- sapiproxy.cs
- HttpVersion.cs
- ChangePasswordDesigner.cs
- SQLStringStorage.cs
- OletxEnlistment.cs
- PerformanceCounter.cs
- NegotiateStream.cs
- AutoResizedEvent.cs
- AvtEvent.cs
- AncestorChangedEventArgs.cs
- TextWriterTraceListener.cs
- Boolean.cs
- PeerApplication.cs
- ColumnHeaderConverter.cs
- Automation.cs
- ValidationResults.cs
- DesignerVerb.cs
- Transform3D.cs
- StringOutput.cs
- RegexCaptureCollection.cs