title: Need Observable timer to pass messages to UI thread
body: <p>This code, called from the UI thread:</p>
  
  <pre><code>Jobs.Current.ShowProgress(_ =&gt;
      {
          if (Jobs.Current.Duration == 0 &amp;&amp; this.progressBarMarkJob.Value &gt;= this.progressBarMarkJob.Maximum - this.progressBarMarkJob.Step / 2)
          {
              this.progressBarMarkJob.Step /= 2;
          }
          this.progressBarMarkJob.PerformStep();
      }, () =&gt;
      {
          stopwatch.Stop();
          var elapsed = string.Format(stopwatch.Elapsed.TotalHours &gt;= 1 ? @"{0:hh\:mm\:SS}" : @"{0:mm\:SS}", stopwatch.Elapsed);
          this.labelMarkTime.Text = string.Format("Elapsed{0:8}", elapsed);
          this.labelMarkTime.Visible = true;
          Jobs.Current.Duration = (uint)stopwatch.Elapsed.TotalSeconds;
          this.progressBarMarkJob.Value = this.progressBarMarkJob.Maximum;
      });
  </code></pre>
  
  <p>where ShowProgress does:</p>
  
  <pre><code>public void ShowProgress(Action&lt;long&gt; notify, Action terminate)
  {
      this.Progress = Observable.Timer(ProgressInterval, ProgressInterval).Finally(terminate).Subscribe(notify);
  }
  </code></pre>
  
  <p>blocks the UI thread completely, making it unresponsive.</p>
  
  <p>If I insert .SubscribeOn(Scheduler.CurrentThread) before the Subscribe() call, it no longer blocks the UI thread.  But then I get cross-thread exceptions, because the messages are not passed to the UI on the correct thread.</p>
  
  <p>Is there a way to make that work so that I can get updates from the timer - leaving the UI responsive - that post back to the UI thread?</p>