Ahmed Aekbj
Ahmed Aekbj

Reputation: 91

Can't write to the richTextBox

I have this simple program :

private static System.Timers.Timer t3;

    private void button1_Click(object sender, EventArgs e)
    {
        t3 = new System.Timers.Timer(5000);
        t3.AutoReset = true; t3.Enabled = true; t3.Elapsed += OnTimedEvent3;

    }

    private void OnTimedEvent3(Object source, ElapsedEventArgs e)
    {
        // MessageBox.Show("event raised");
        richTextBox1.Text = "t3 is elapsed ";// 
      }

PROBLEM : : Nothing appears in the richTextBox1 after event is fired ! I have tried MessageBox and that works fine . what could be the problem ??

Upvotes: 0

Views: 92

Answers (1)

Fruchtzwerg
Fruchtzwerg

Reputation: 11389

Your problem is the following: The eventhandler of your timer is running on a different thread like your UI. You need to invoke the control like

if(richTextBox1.InvokeRequired == true)
{
    richTextBox1.Invoke((MethodInvoker)delegate
    {
      richTextBox1.Text = "t3 is elapsed "
    });
}
else
{
    richTextBox1.Text = "t3 is elapsed ";
}

to access it correctly. Thats because UI objects are related to their thread. Creating a MessageBox for example is possible out of every thread - because your Box is not existing already.

Upvotes: 2

Related Questions