C# 定时器+;显示消息+;不同的时间间隔
如何使用按钮以不同的时间间隔在C#表单应用程序上显示某些消息 比如:C# 定时器+;显示消息+;不同的时间间隔,c#,timer,C#,Timer,如何使用按钮以不同的时间间隔在C#表单应用程序上显示某些消息 比如: private void button1_Click(object sender, EventArgs e) { label1.Text = "string1"; [wait 3 seconds] label1.Text = "string2"; [wait 5 sec] label1.text="string 3"; [end] } 要完全按
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "string1";
[wait 3 seconds]
label1.Text = "string2";
[wait 5 sec]
label1.text="string 3";
[end]
}
要完全按照伪代码的建议执行,只需使用
Thread.Sleep()
代替[wait x]
行即可。请注意,这可能会使UI在等待期间无响应
或者,您可以创建一个执行相同操作但不阻止UI线程的线程。唯一的问题是您必须在UI线程中定义委托,否则它将无法工作
private void button1_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(delegate()
{
label1.Text = "string1";
Thread.Sleep(3000);
label1.Text = "string2";
Thread.Sleep(5000);
//etc...
});
}
您可以创建新线程、更改标签文本、休眠该线程等:
using System.Threading;
使用间隔为X毫秒的计时器,并在每个计时器滴答声时更新UI。跟踪接收到的计时器节拍数,以便知道使用哪个字符串。每次更新完成后,停止计时器 发布的其他解决方案可能更明智,但这一个非常简单 Form1包含一个名为Label1的简单标签和一个名为Button1的按钮
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
t.Interval = 100;
t.Tick += new EventHandler(t_Tick);
t.Start();
}
Timer t = new Timer();
int counter = 0;
private void Button1_Click(object sender, EventArgs e)
{
t.Start();
}
void t_Tick(object sender, EventArgs e)
{
try
{
t.Enabled = false; //Disable timer so we don't start t_Tick when t_Tick is still runnnig
if (counter == 0)
{
label1.Text = "string1";
t.Interval = 3000;
}
if (counter == 1)
{
label1.Text = "string2";
t.Interval = 5000;
}
if (counter == 2)
{
label1.Text = "string3";
t.Stop(); //Stop timer
}
else
{
t.Enabled = true; //Resume timer
}
counter++;
}
catch (Exception ex)
{
MessageBox.Show("Never throw exception from timer..." + ex.Message);
}
}
非常感谢。 哦,我喜欢stakoverflow.com 我是这样做的。:) 谢谢所有温柔的男人:) 请评论我是怎么做的?我真的希望这一切发生在点击按钮 公共部分类主窗体:窗体{ 公共表格( 计时器myTimer=新计时器() 私有无效按钮1\u单击(对象发送者,事件参数e) int计数器=0
void myTimer_Tick(object sender, EventArgs e)
{
if (counter == 0)
{
label4.Text = "string1";
myTimer.Interval = 2000;
}
if (counter == 1)
{
label4.Text = "string2";
myTimer.Interval = 2000;
}
if (counter == 2)
{
label4.Text = "string3";
myTimer.Stop();
}
else
{
myTimer.Enabled = true;
}
counter++;
} }
我用你们提供的有价值的例子来完成这一切。我把它们放在一起,让它们按照我想要的方式工作。
再次感谢大家:)考虑到您已将此问题命名为“计时器”,您显然已经了解计时器。这正是您需要的。您已经尝试过了吗?您必须使用一些线程。当前代码仅显示字符串3。我认为您必须根据进程显示一些消息。我在Go for timer(如果间隔固定)中的建议或者去做地下工作者。是的,我试过定时器。但正如我说的,我在学习。所以我把一切都搞砸了。我在这里发帖之前试过一些:D你不知道他说了什么吗?他是c#的新手,所以最好从底层开始。我甚至不确定他是否会理解其他人都发了什么。重要的是理解到底是什么是Thread.Sleep()方法。当他遇到这些问题时,他可以进一步探索。;)因为生活会找到办法的。我不认为使用
Thread.Sleep()方法
是从底层开始的。你需要理解线程,才能理解它的功能,为什么你应该/不应该使用它,等等。我称之为相对底层。我确实理解其他人发布的内容。使用计时器。我尝试了所有线程。sleep()在这里发布之前。但后来一切都搞砸了。所以最后在这里被问到作为理由:)非常感谢你这么好的回答:)这些例子将帮助我了解更多。:)谢谢。很高兴听到这些,但如果你一直在寻找一个真正的计时工具,这实际上并不好。为此,使用计时器类谢谢:)…这个想法可能这就是我一直在寻找的:)以及如何通过点击按钮来开始这一切?@Ron:put't.start()“在按钮点击处理程序下。我还有一个问题。如果我用按钮启动它,它会在字符串3后停止,这是应该的。但是,如果我再次按下按钮,它不会再次启动ovr。你必须重置计数器。代码优化建议将非常受欢迎:)我是初学者/学习者。我是从这个计时器项目中制作的
private delegate void setLabelTextDelegate(string text);
private void setLabelText(string text)
{
this.label1.Text = text;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
t.Interval = 100;
t.Tick += new EventHandler(t_Tick);
t.Start();
}
Timer t = new Timer();
int counter = 0;
private void Button1_Click(object sender, EventArgs e)
{
t.Start();
}
void t_Tick(object sender, EventArgs e)
{
try
{
t.Enabled = false; //Disable timer so we don't start t_Tick when t_Tick is still runnnig
if (counter == 0)
{
label1.Text = "string1";
t.Interval = 3000;
}
if (counter == 1)
{
label1.Text = "string2";
t.Interval = 5000;
}
if (counter == 2)
{
label1.Text = "string3";
t.Stop(); //Stop timer
}
else
{
t.Enabled = true; //Resume timer
}
counter++;
}
catch (Exception ex)
{
MessageBox.Show("Never throw exception from timer..." + ex.Message);
}
}
{
myTimer.Tick += new EventHandler(myTimer_Tick);
myTimer.Interval = 2000;
myTimer.Start();
}
void myTimer_Tick(object sender, EventArgs e)
{
if (counter == 0)
{
label4.Text = "string1";
myTimer.Interval = 2000;
}
if (counter == 1)
{
label4.Text = "string2";
myTimer.Interval = 2000;
}
if (counter == 2)
{
label4.Text = "string3";
myTimer.Stop();
}
else
{
myTimer.Enabled = true;
}
counter++;
} }