如何使用按钮以不同的时间间隔在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]
}
答案 0 :(得分:2)
您可以创建新线程,更改标签文本,睡眠该线程等等:
using System.Threading;
// Somewhere in your Form, for example in Form_Load event:
new Thread(new ThreadStart(delegate {
var d = new setLabelTextDelegate(setLabelText);
label1.Invoke(d, new object[] { "string 1" });
Thread.Sleep(3000); // sleep 3 seconds
label1.Invoke(d, new object[] { "string 2" });
Thread.Sleep(5000); // sleep 5 seconds
label1.Invoke(d, new object[] { "string 3" });
})).Start();
private delegate void setLabelTextDelegate(string text);
private void setLabelText(string text)
{
this.label1.Text = text;
}
答案 1 :(得分:1)
使用间隔为X毫秒的Timer,并更新每个Timer Tick的UI。跟踪收到的Timer Ticks的数量,以便您知道要使用的字符串。处理完每个更新后,停止计时器。
发布的其他解决方案可能更明智,但这个很简单。
Form1包含一个名为Label1的简单Label和一个名为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);
}
}
答案 2 :(得分:0)
完全按照您的伪代码建议,只需使用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...
});
}
答案 3 :(得分:0)
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "string1";
System.Threading.Thread.Sleep(3*1000);
label1.Text = "string2";
System.Threading.Thread.Sleep(5*1000);
label1.text="string 3";
}
答案 4 :(得分:0)
非常感谢你。
哦,我喜欢stakoverflow.com 我做了这样的事情。:) 谢谢所有温柔的男士:) 请评论我是怎么做的?我实际上希望这一切都发生在点击按钮。
public partial class mainForm:Form { public mainForm()
Timer myTimer = new Timer();
private void button1_Click(object sender,EventArgs e)
{ myTimer.Tick += new EventHandler(myTimer_Tick); myTimer.Interval = 2000; myTimer.Start(); }
int counter = 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++; } }
我使用您提供的有价值的示例完成了所有工作。我把它们放在一起,让它按照我想要的方式工作。 再次感谢大家:)