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属性将打乱任何以前的格式设置。如果课文已完全设置好,但值得记住,这不是什么大问题。。