title: Control text update in event throws illegal cross thread exception
body: <p>I am working on a Youtube search by keyword programmatically and using Youtube API to do this. I want to fire an event when a search progress is completed and return the result in <code>YoutubeSearchCompletedEventArgs</code> sent by <code>YoutubeSearchCompleted</code>.</p>
  
  <p>But the code in<code>YoutubeSearchCompleted</code> in <code>Form.cs</code> throws cross thread illegal operation exception. Normally, using <code>AsyncOperation.Post</code> method it must not throw <code>InvalidOperationException</code>. Because I used the same method in a download manager project before and it worked well. So I can't understand why this happens.</p>
  
  <blockquote>
    <p>Youtube search class</p>
  </blockquote>
  
  <pre><code>class YouTubeManager
  {
      public delegate void YoutubeSearchCompletedEventHandler(object sender, YoutubeSearchCompletedEventArgs e);
      public event YoutubeSearchCompletedEventHandler YoutubeSearchCompleted;
      AsyncOperation aop = AsyncOperationManager.CreateOperation(null);
  
      List&lt;YoutubeVideo&gt; SearchByKeyword(string keyword)
      {
          List&lt;YoutubeVideo&gt; videos = new List&lt;YoutubeVideo&gt;();
  
          //.......
          //...Youtube data api search codes....
          //.......
  
          return videos;
      }
      public void Search(string keyword)
      {
          Task.Run(() =&gt;
          {
              List&lt;YoutubeVideo&gt; list = SearchByKeyword(keyword);
              aop.Post(new System.Threading.SendOrPostCallback(delegate
              {
                  if (YoutubeSearchCompleted != null)
                      YoutubeSearchCompleted(this, 
                          new YoutubeSearchCompletedEventArgs(keyword, list);
              }), null);
          });
      }
  }
  </code></pre>
  
  <blockquote>
    <p>Form.cs</p>
  </blockquote>
  
  <pre><code>public partial class Form1 : Form
  {
      YouTubeManager yam = new YouTubeManager();
      public Form1()
      {
          InitializeComponent();
          this.Load += Form1_Load;
      }
  
      void Form1_Load(object sender, EventArgs e)
      {
          yam.YoutubeSearchCompleted += yam_YoutubeSearchCompleted;
          yam.Search("Blues");
      }
  
      void yam_YoutubeSearchCompleted(object sender, YoutubeSearchCompletedEventArgs e)
      {
          if (e.Videos.Count &lt; 1) return;
  
          textBox1.Text = e.Videos[0].Title();
      }
  }
  </code></pre>
  
  <p>In this code the <code>textBox1.Text = e.Videos[0].Title();</code> line throws <code>InvalidOperationException</code>. How can I fix this problem? </p>
  
  <p><strong>Note:</strong> I don't want <code>Invoke</code> method, just <code>AsyncOperation</code>.</p>