private void btnProveri_Click(object sender, EventArgs e)
{
lblRezultat.Text = DateTime.Now.ToString();
timer1.Interval = 1800;
timer1.Start();
MessageBox.Show(DateTime.Now.ToString());
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 1800;
}
我是一个试图学习计时器的新手,这是我上面的代码。我想制作一个持续1.8秒的计时器。然后我在单击按钮时调用它,第一次将标签设置为特定日期,然后我将间隔设置为计时器并启动它,但消息框输出相同的时间(完全没有延迟)。
答案 0 :(得分:3)
那是因为您在创建计时器的相同代码中显示消息框。有效:
buttonClick:
Populate some text field.
Start timer so that it calls timerTick in 1.8 seconds
Display message box
timerTick:
Restart timer so it calls this function in 1.8 seconds.
如您所见,按下按钮时会显示消息框,而不会在计时器触发时显示。当计时器触发时,您所做的只是将其设置为在另一个 1.8秒内再次触发,但此时您实际上并未执行任何其他操作。
如果要在计时器触发后显示它,则必须在计时器功能timer1_Tick
中完成。但是你可能要小心,可能可能你最终会得到相当多的对话框。
答案 1 :(得分:0)
看起来你想做这样的事情:
private void btnProveri_Click(object sender, EventArgs e)
{
lblRezultat.Text = DateTime.Now.ToString();
var timer = new System.Timers.Timer(1800);
timer.Start();
timer.Elapsed += timer1_Tick;
}
private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show(DateTime.Now.ToString());
}
以下是工作控制台示例:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("App started");
var timer = new System.Timers.Timer(1800);
timer.Start();
timer.Elapsed += timerHandler;
Console.ReadLine();
}
private static void timerHandler(object sender, System.Timers.ElapsedEventArgs e)
{
Messenger(DateTime.UtcNow.ToString());
}
private static void Messenger(string time)
{
Console.WriteLine(time);
}
}