以不同的时间间隔显示信息的文本框
本文关键字:信息 显示 文本 时间 | 更新日期: 2023-09-27 18:03:26
我已经创建了动态计时器。这需要不同的时间间隔。但是所有的信息都是一次性出现的。我希望每条信息都是在它的时间结束后才出现。
我该怎么做呢?
private void btnTest_Click(object sender, EventArgs e)
{
for (int x = 0; x <= 5; x++)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.AutoReset=true;
timer.Start();
timer.Interval = ((x + 1) * 100);
this.txtOutput.Text += "'r'r'n" + " this out put equal to " + ((x + 1) * 100);
Thread.Sleep((x + 1) * 100);
this.txtOutput.Text += "'r'r'n" + " Ends x " + x;
}
}
我想你用错定时器了。尝试使用System.Windows.Forms.Timer来代替,并使用实际的tick事件来执行您的逻辑:
var timer = new System.Windows.Forms.Timer();
int track = 0;
timer.Tick += (timerObject, timerArgs) => {
timer.Interval = ((track + 1) * 100);
this.txtOutput.Text += "'r'r'n" + " this out put equal to "
+ ((track + 1) * 100);
++track;
if (track > 4) {
timer.Stop();
timer.Dispose();
this.txtOutput.Text += "'r'r'n" + " Ends x " + track.ToString();
}
};
timer.Start();
首先,您必须在UI线程之外执行此操作,文本在返回off btnTest_Click方法后显示,当Thread.Sleep((x + 1) * 100);
运行时,UI线程被冻结。
但是,你必须小心,UI控件只能从UI线程访问,所以你必须使用表单的BeginInvoke方法。
使用BackgroundWorker:private void btnTest_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int x = 0; x <= 5; x++)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.AutoReset = true;
timer.Start();
timer.Interval = ((x + 1) * 100);
this.BeginInvoke(new MethodInvoker(delegate
{
this.txtOutput.Text += "'r'r'n" + " this out put equal to " + ((x + 1) * 100);
}));
Thread.Sleep((x + 1) * 100);
this.BeginInvoke(new MethodInvoker(delegate
{
this.txtOutput.Text += "'r'r'n" + " Ends x " + x;
}));
}
}
在Windows窗体中可以这样做
for (var x = 0; x <= 5; x++)
{
textBox1.Text += "'r'r'n" + " this out put equal to " + ((x + 1) * 100);
textBox1.Text += "'r'r'n" + " Ends x " + x;
Application.DoEvents();
Thread.Sleep(200);
}