Winforms Timer for Dummies

Mar*_*son 16 timer winforms

我正试图让一个计时器在winform中每秒钟打一次,当我寻找关于如何做到这一点的建议我找到了大量关于线程的东西.好吧,我不关心线程,因为我所要做的就是让值在一分钟内从60倒数到0,然后停止.我认为我们不需要进入云计算来解决这个问题,但我真的是一个网络形式,所以我在这个问题上有点生疏.任何人都可以给我一个例子

这是我尝试过的

private void button1_Click(object sender, EventArgs e)
    {
        this.timeLeft = 60;
        this.label1.Visible = false;
        this.button1.Visible = false;
        gt = new Timer();
        gt.Tick += new EventHandler(CountDown);
        gt.Interval = 1000;
        gt.Start();
    }

private void CountDown(object sender, EventArgs e)
{
    do
    {
        this.TimeBar.Value = timeLeft;                
        this.timeLeft -= 1;
    } while (this.timeLeft > 0);
    if (this.TimeBar.Value > 0) return;
    gt.Stop();
    this.label1.Visible = true;
    this.button1.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

cha*_*rit 9

不要,如果你使用的WinForms'定时器需要穿线.

删除页面上的Timer控件,将其命名为"timer"并粘贴以下代码:

public MainForm()
{
    InitializeComponent();

    timer.Interval = 1000;
    timer.Start();

    timeLeft = 60;
    timer.Tick += Timer_Tick;

    // start things
    label1.Hide();
    button1.Hide();
    timer.Start();

}

public void Timer_Tick(object sender, EventArgs e)
{
    timeLeft--;

    if (timeLeft <= 0) {
        timer.Stop();
        label1.Show();
        button1.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想如果你来自webby背景,事件驱动的编程可能是你需要开始阅读的东西,如果你想了解桌面上的东西是如何被编程的.


jas*_*onh 8

发生的事情是你将timeLeft变量递减,直到它在定时器的第一个滴答声中达到零.取出do...while循环,你将有一个基本的工作示例.

但是,如果您要进行任何数量的Windows窗体工作,则需要了解线程以及它对UI的影响.如果你没有关于无用的异常和行为不当的UI组件的故事,你很快就会发现自己回到这里.Jon Skeet有一个很棒的穿线系列.我强烈推荐它.它有一个专门用于计时器的部分,因此可能会给你一些额外的见解.