无法写入 richTextBox
Can't write to the 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
并且效果很好。可能是什么问题??
您的问题如下:
您的计时器的事件处理程序是 运行 在与您的 UI 不同的线程上。你需要像
这样调用控件
if(richTextBox1.InvokeRequired == true)
{
richTextBox1.Invoke((MethodInvoker)delegate
{
richTextBox1.Text = "t3 is elapsed "
});
}
else
{
richTextBox1.Text = "t3 is elapsed ";
}
才能正确访问它。那是因为 UI 对象与其线程相关。例如,可以在每个线程中创建一个 MessageBox - 因为您的 Box 还不存在。
我有这个简单的程序:
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
并且效果很好。可能是什么问题??
您的问题如下: 您的计时器的事件处理程序是 运行 在与您的 UI 不同的线程上。你需要像
这样调用控件if(richTextBox1.InvokeRequired == true)
{
richTextBox1.Invoke((MethodInvoker)delegate
{
richTextBox1.Text = "t3 is elapsed "
});
}
else
{
richTextBox1.Text = "t3 is elapsed ";
}
才能正确访问它。那是因为 UI 对象与其线程相关。例如,可以在每个线程中创建一个 MessageBox - 因为您的 Box 还不存在。