title: What happened to Control.InvokeRequired in WPF?
body: <p>I am writing a small WPF app which spawns some number of threads to stress test a page of a website. I would like to output some information in the textbox of the wpf form of state of the thread I am manually starting from the main WPF thread. I was kind of expecting the WPF to have the same capabilities as far as synchronizing my threads back to the GUI thread through:</p>
  
  <pre><code>  if(this.InvokeRequired)
         this.Invoke(ProcessState);
  </code></pre>
  
  <p>However there is nothing of the sorts in the WPF... what are the options to do the output from a non-gui thread in WPF?</p>
  
  <p><b>Edit:</b>
  The issue now appears to be in the fact that I am not able to check for the method <code>CheckAccess()</code> of the <code>Dispatcher</code> object of my control. I am running the 3.5 version of .net and VS 2008 SP1. </p>
  
  <p>Here is the full metadata of my Dispatcher Class (F12 on it):</p>
  
  <pre><code>  using MS.Internal.WindowsBase;
    using System;
    using System.ComponentModel;
    using System.Security;
    using System.Threading;
  
    namespace System.Windows.Threading
    {
       // Summary:
  //     Provides services for managing the queue of work items for a thread.
  public sealed class Dispatcher
  {
      // Summary:
      //     Gets the System.Windows.Threading.Dispatcher for the thread currently executing
      //     and creates a new System.Windows.Threading.Dispatcher if one is not already
      //     associated with the thread.
      //
      // Returns:
      //     The dispatcher associated with the current thread.
      public static Dispatcher CurrentDispatcher { get; }
      //
      // Summary:
      //     Determines whether the System.Windows.Threading.Dispatcher has finished shutting
      //     down.
      //
      // Returns:
      //     true if the dispatcher has finished shutting down; otherwise, false.
      public bool HasShutdownFinished { get; }
      //
      // Summary:
      //     Determines whether the System.Windows.Threading.Dispatcher is shutting down.
      //
      // Returns:
      //     true if the System.Windows.Threading.Dispatcher has started shutting down;
      //     otherwise, false.
      public bool HasShutdownStarted { get; }
      //
      // Summary:
      //     Gets the collection of hooks that provide additional event information about
      //     the System.Windows.Threading.Dispatcher.
      //
      // Returns:
      //     The hooks associated with this System.Windows.Threading.Dispatcher.
      [EditorBrowsable(EditorBrowsableState.Advanced)]
      public DispatcherHooks Hooks { get; }
      //
      // Summary:
      //     Gets the thread this System.Windows.Threading.Dispatcher is associated with.
      //
      // Returns:
      //     The thread.
      public Thread Thread { get; }
  
      // Summary:
      //     Occurs when the System.Windows.Threading.Dispatcher finishes shutting down.
      public event EventHandler ShutdownFinished;
      //
      // Summary:
      //     Occurs when the System.Windows.Threading.Dispatcher begins to shut down.
      public event EventHandler ShutdownStarted;
      //
      // Summary:
      //     Occurs when a thread exception is thrown and uncaught during execution of
      //     a delegate by way of Overload:System.Windows.Threading.Dispatcher.Invoke
      //     or Overload:System.Windows.Threading.Dispatcher.BeginInvoke.
      public event DispatcherUnhandledExceptionEventHandler UnhandledException;
      //
      // Summary:
      //     Occurs when a thread exception is thrown and uncaught during execution of
      //     a delegate by way of Overload:System.Windows.Threading.Dispatcher.Invoke
      //     or Overload:System.Windows.Threading.Dispatcher.BeginInvoke when in the filter
      //     stage.
      public event DispatcherUnhandledExceptionFilterEventHandler UnhandledExceptionFilter;
  
      public DispatcherOperation BeginInvoke(Delegate method, params object[] args);
      //
      // Summary:
      //     Executes the specified delegate asynchronously at the specified priority
      //     on the thread the System.Windows.Threading.Dispatcher is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   method:
      //     The delegate to a method that takes no arguments, which is pushed onto the
      //     System.Windows.Threading.Dispatcher event queue.
      //
      // Returns:
      //     An object, which is returned immediately after Overload:System.Windows.Threading.Dispatcher.BeginInvoke
      //     is called, that can be used to interact with the delegate as it is pending
      //     execution in the event queue.
      //
      // Exceptions:
      //   System.ArgumentNullException:
      //     method is null.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid System.Windows.Threading.DispatcherPriority.
      [EditorBrowsable(EditorBrowsableState.Never)]
      [Browsable(false)]
      public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method);
      public DispatcherOperation BeginInvoke(Delegate method, DispatcherPriority priority, params object[] args);
      //
      // Summary:
      //     Executes the specified delegate asynchronously at the specified priority
      //     and with the specified argument on the thread the System.Windows.Threading.Dispatcher
      //     is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   method:
      //     A delegate to a method that takes one argument, which is pushed onto the
      //     System.Windows.Threading.Dispatcher event queue.
      //
      //   arg:
      //     The object to pass as an argument to the specified method.
      //
      // Returns:
      //     An object, which is returned immediately after Overload:System.Windows.Threading.Dispatcher.BeginInvoke
      //     is called, that can be used to interact with the delegate as it is pending
      //     execution in the event queue.
      //
      // Exceptions:
      //   System.ArgumentNullException:
      //     method is null.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid System.Windows.Threading.DispatcherPriority.
      [EditorBrowsable(EditorBrowsableState.Never)]
      [Browsable(false)]
      public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method, object arg);
      //
      // Summary:
      //     Executes the specified delegate asynchronously at the specified priority
      //     and with the specified array of arguments on the thread the System.Windows.Threading.Dispatcher
      //     is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   method:
      //     A delegate to a method that takes multiple arguments, which is pushed onto
      //     the System.Windows.Threading.Dispatcher event queue.
      //
      //   arg:
      //     The object to pass as an argument to the specified method.
      //
      //   args:
      //     An array of objects to pass as arguments to the specified method.
      //
      // Returns:
      //     An object, which is returned immediately after Overload:System.Windows.Threading.Dispatcher.BeginInvoke
      //     is called, that can be used to interact with the delegate as it is pending
      //     execution in the System.Windows.Threading.Dispatcher queue.
      //
      // Exceptions:
      //   System.ArgumentNullException:
      //     method is null.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     System.Windows.Threading.DispatcherPriority is not a valid priority.
      [Browsable(false)]
      [EditorBrowsable(EditorBrowsableState.Never)]
      public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method, object arg, params object[] args);
      //
      // Summary:
      //     Initiates shutdown of the System.Windows.Threading.Dispatcher asynchronously.
      //
      // Parameters:
      //   priority:
      //     The priority at which to begin shutting down the dispatcher.
      [SecurityCritical]
      public void BeginInvokeShutdown(DispatcherPriority priority);
      //
      // Summary:
      //     Determines whether the calling thread is the thread associated with this
      //     System.Windows.Threading.Dispatcher.
      //
      // Returns:
      //     true if the calling thread is the thread associated with this System.Windows.Threading.Dispatcher;
      //     otherwise, false.
      [EditorBrowsable(EditorBrowsableState.Never)]
      public bool CheckAccess();
      //
      // Summary:
      //     Disables processing of the System.Windows.Threading.Dispatcher queue.
      //
      // Returns:
      //     A structure used to re-enable dispatcher processing.
      public DispatcherProcessingDisabled DisableProcessing();
      //
      // Summary:
      //     Requests that all frames exit, including nested frames.
      [SecurityCritical]
      public static void ExitAllFrames();
      //
      // Summary:
      //     Gets the System.Windows.Threading.Dispatcher for the specified thread.
      //
      // Parameters:
      //   thread:
      //     The thread to obtain the System.Windows.Threading.Dispatcher from.
      //
      // Returns:
      //     The dispatcher for thread.
      public static Dispatcher FromThread(Thread thread);
      public object Invoke(Delegate method, params object[] args);
      //
      // Summary:
      //     Executes the specified delegate synchronously at the specified priority on
      //     the thread on which the System.Windows.Threading.Dispatcher is associated
      //     with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   method:
      //     A delegate to a method that takes no arguments, which is pushed onto the
      //     System.Windows.Threading.Dispatcher event queue.
      //
      // Returns:
      //     The return value from the delegate being invoked or null if the delegate
      //     has no return value.
      //
      // Exceptions:
      //   System.ArgumentException:
      //     priority is equal to System.Windows.Threading.DispatcherPriority.Inactive.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid priority.
      //
      //   System.ArgumentNullException:
      //     method is null.
      [Browsable(false)]
      [EditorBrowsable(EditorBrowsableState.Never)]
      public object Invoke(DispatcherPriority priority, Delegate method);
      public object Invoke(Delegate method, DispatcherPriority priority, params object[] args);
      public object Invoke(Delegate method, TimeSpan timeout, params object[] args);
      //
      // Summary:
      //     Executes the specified delegate at the specified priority with the specified
      //     argument synchronously on the thread the System.Windows.Threading.Dispatcher
      //     is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   method:
      //     A delegate to a method that takes one argument, which is pushed onto the
      //     System.Windows.Threading.Dispatcher event queue.
      //
      //   arg:
      //     An object to pass as an argument to the given method.
      //
      // Returns:
      //     The return value from the delegate being invoked or null if the delegate
      //     has no return value.
      //
      // Exceptions:
      //   System.ArgumentException:
      //     priority is equal to System.Windows.Threading.DispatcherPriority.Inactive.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid priority.
      //
      //   System.ArgumentNullException:
      //     method is null.
      [EditorBrowsable(EditorBrowsableState.Never)]
      [Browsable(false)]
      public object Invoke(DispatcherPriority priority, Delegate method, object arg);
      //
      // Summary:
      //     Executes the specified delegate synchronously at the specified priority and
      //     with the specified time-out value on the thread the System.Windows.Threading.Dispatcher
      //     was created.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   timeout:
      //     The maximum time to wait for the operation to finish.
      //
      //   method:
      //     The delegate to a method that takes no arguments, which is pushed onto the
      //     System.Windows.Threading.Dispatcher event queue.
      //
      // Returns:
      //     The return value from the delegate being invoked or null if the delegate
      //     has no return value.
      [Browsable(false)]
      [EditorBrowsable(EditorBrowsableState.Never)]
      public object Invoke(DispatcherPriority priority, TimeSpan timeout, Delegate method);
      public object Invoke(Delegate method, TimeSpan timeout, DispatcherPriority priority, params object[] args);
      //
      // Summary:
      //     Executes the specified delegate at the specified priority with the specified
      //     arguments synchronously on the thread the System.Windows.Threading.Dispatcher
      //     is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   method:
      //     A delegate to a method that takes multiple arguments, which is pushed onto
      //     the System.Windows.Threading.Dispatcher event queue.
      //
      //   arg:
      //     An object to pass as an argument to the given method.
      //
      //   args:
      //     An array of objects to pass as arguments to the given method.
      //
      // Returns:
      //     The return value from the delegate being invoked or null if the delegate
      //     has no return value.
      //
      // Exceptions:
      //   System.ArgumentException:
      //     priority is equal to System.Windows.Threading.DispatcherPriority.Inactive.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid priority.
      //
      //   System.ArgumentNullException:
      //     method is null.
      [EditorBrowsable(EditorBrowsableState.Never)]
      [Browsable(false)]
      public object Invoke(DispatcherPriority priority, Delegate method, object arg, params object[] args);
      //
      // Summary:
      //     Executes the specified delegate at the specified priority with the specified
      //     argument synchronously on the thread the System.Windows.Threading.Dispatcher
      //     is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   timeout:
      //     The maximum time to wait for the operation to finish.
      //
      //   method:
      //     A delegate to a method that takes multiple arguments, which is pushed onto
      //     the System.Windows.Threading.Dispatcher event queue.
      //
      //   arg:
      //     An object to pass as an argument to the given method. This can be null if
      //     no arguments are needed.
      //
      // Returns:
      //     The return value from the delegate being invoked or null if the delegate
      //     has no return value.
      //
      // Exceptions:
      //   System.ArgumentException:
      //     priority is equal to System.Windows.Threading.DispatcherPriority.Inactive.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid priority.
      //
      //   System.ArgumentNullException:
      //     method is null.
      [EditorBrowsable(EditorBrowsableState.Never)]
      [Browsable(false)]
      public object Invoke(DispatcherPriority priority, TimeSpan timeout, Delegate method, object arg);
      //
      // Summary:
      //     Executes the specified delegate at the specified priority with the specified
      //     arguments synchronously on the thread the System.Windows.Threading.Dispatcher
      //     is associated with.
      //
      // Parameters:
      //   priority:
      //     The priority, relative to the other pending operations in the System.Windows.Threading.Dispatcher
      //     event queue, the specified method is invoked.
      //
      //   timeout:
      //     The maximum time to wait for the operation to finish.
      //
      //   method:
      //     A delegate to a method that takes multiple arguments, which is pushed onto
      //     the System.Windows.Threading.Dispatcher event queue.
      //
      //   arg:
      //     An object to pass as an argument to the specified method.
      //
      //   args:
      //     An array of objects to pass as arguments to the specified method.
      //
      // Returns:
      //     The return value from the delegate being invoked or null if the delegate
      //     has no return value.
      //
      // Exceptions:
      //   System.ArgumentException:
      //     priority is equal to System.Windows.Threading.DispatcherPriority.Inactive.
      //
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid System.Windows.Threading.DispatcherPriority.
      //
      //   System.ArgumentNullException:
      //     method is null.
      [Browsable(false)]
      [EditorBrowsable(EditorBrowsableState.Never)]
      public object Invoke(DispatcherPriority priority, TimeSpan timeout, Delegate method, object arg, params object[] args);
      //
      // Summary:
      //     Initiates the shutdown process of the System.Windows.Threading.Dispatcher
      //     synchronously.
      [SecurityCritical]
      public void InvokeShutdown();
      //
      // Summary:
      //     Enters an execute loop.
      //
      // Parameters:
      //   frame:
      //     The frame for the dispatcher to process.
      //
      // Exceptions:
      //   System.ArgumentNullException:
      //     frame is null.
      //
      //   System.InvalidOperationException:
      //     System.Windows.Threading.Dispatcher.HasShutdownFinished is true -or- frame
      //     is running on a different System.Windows.Threading.Dispatcher.  -or- Dispatcher
      //     processing has been disabled.
      [SecurityCritical]
      public static void PushFrame(DispatcherFrame frame);
      //
      // Summary:
      //     Pushes the main execution frame on the event queue of the System.Windows.Threading.Dispatcher.
      [SecurityCritical]
      public static void Run();
      //
      // Summary:
      //     Determines whether the specified System.Windows.Threading.DispatcherPriority
      //     is a valid priority.
      //
      // Parameters:
      //   priority:
      //     The priority to check.
      //
      //   parameterName:
      //     A string that will be returned by the exception that occurs if the priority
      //     is invalid.
      //
      // Exceptions:
      //   System.ComponentModel.InvalidEnumArgumentException:
      //     priority is not a valid System.Windows.Threading.DispatcherPriority.
      public static void ValidatePriority(DispatcherPriority priority, string parameterName);
      //
      // Summary:
      //     Determines whether the calling thread has access to this System.Windows.Threading.Dispatcher.
      //
      // Exceptions:
      //   System.InvalidOperationException:
      //     The calling thread does not have access to this System.Windows.Threading.Dispatcher.
      [EditorBrowsable(EditorBrowsableState.Never)]
      public void VerifyAccess();
  }
  </code></pre>
  
  <p>}</p>