title: How to change Label text after seconds?
body: <p>I have searched and tried many approaches to this problem.<br></p>
  
  <p>With a Visual Studio 2015 WinForma app, I want a <code>Label</code>'s text to change after a time delay.<br></p>
  
  <p>Of my many approaches, I can confirm the string value of the label has changed with a <code>MessageBox</code>, but the onscreen UI does not change.<br></p>
  
  <p>So far I have tryed:<br></p>
  
  <p>1: <code>Thread.Sleep(number)</code> inside <code>Public Form1()</code> before I change the value.<br>
  Result: doesn't seem to update the UI before the end of the function.<br></p>
  
  <p>2: <code>nameoflabel.refresh();</code> EVERYWHERE.<br>
  Result: does not do anything anywhere.<br></p>
  
  <p>3: use <code>System.Timers</code> and change the value of my <code>Label</code> inside the Timer's elapsed function.<br>
  Result: changes the value of <code>Label</code> but is not seen onscreen.<br></p>
  
  <p>4: since everything involving a button click works perfectly to change my label text, I reseached how to imitate a button click with <code>buttonName.preformClick()</code> and made a fake button for the purpose.<br>
  Result: value changes but still nothing changes on screen.<br></p>
  
  <p>I am starting to believe this must be a bug. Yes? No?
  Anyway, here is what I need to work:<br></p>
  
  <pre><code>public partial class Form1 : Form
  {
      public System.Timers.Timer holder;
      Label say;
  
      public Form1()
      {
          InitializeComponent();
  
          say = new Label();
          say.Text="start text";
          this.Controls.Add(say);
          holder = new System.Timers.Timer(5000);
          holder.Elapsed += new ElapsedEventHandler(holdone); 
          holder.Enabled = true;
      }
  
      public void holdone(Object source, ElapsedEventArgs e)
      {
          //messagebox is correct but onscreen gui is not
          say.Text = "new after seconds";
          MessageBox.Show(say.Text);
      }
  }
  </code></pre>