C# Can';不要向richTextBox写信

C# Can';不要向richTextBox写信,c#,winforms,richtextbox,C#,Winforms,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; } p

我有一个简单的程序:

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
,效果很好。可能是什么问题???

您的问题如下: 计时器的eventhandler运行在与UI类似的不同线程上。您需要像这样调用控件

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

要正确访问它。这是因为UI对象与其线程相关。例如,每个线程都可以创建MessageBox,因为您的Box不存在。

您的问题如下: 计时器的eventhandler运行在与UI类似的不同线程上。您需要像这样调用控件

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

要正确访问它。这是因为UI对象与其线程相关。例如,每个线程都可以创建MessageBox,因为您的Box还不存在。

richTextBox1和MessageBox之间有什么区别?是的,很好,但这并没有回答我关于差异的问题。为什么不呢?Messagebox是在处理程序中创建的,richTextBox已经存在。虽然它可以工作,但应该注意,修改Text属性将打乱任何以前的格式设置。如果文本已完全设置,但值得记住,
richTextBox1
MessageBox
之间有什么区别?是的,很好,但这并没有回答我关于差异的问题。为什么不呢?Messagebox是在处理程序中创建的,richTextBox已经存在。虽然它可以工作,但应该注意,修改Text属性将打乱任何以前的格式设置。如果课文已完全设置好,但值得记住,这不是什么大问题。。