2016-07-20 4 views
0

Я имею эту простую программу:Невозможно записать в RichTextBox

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 ";// 
     } 

ПРОБЛЕМА:: Ничто не появляется в richTextBox1 после событий обжигают! Я пробовал MessageBox, и это отлично работает. В чем может быть проблема ??

ответ

2

Ваша проблема заключается в следующем: Обработчик событий вашего таймера работает на другой теме, такой как ваш пользовательский интерфейс. Вам необходимо вызвать элемент управления, например,

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

для его правильного доступа. Это потому, что объекты пользовательского интерфейса связаны с их потоком. Создание MessageBox, например, возможно из любого потока - потому что ваш Box уже не существует.

+0

В чем разница между 'richTextBox1' и' MessageBox' –

+0

Отредактирован мой ответ! – Fruchtzwerg

+0

да здорово, но это не ответило на мой вопрос. Разница –

Смежные вопросы