使用Timer动画标签不起作用

时间:2012-10-28 20:08:44

标签: c# timer label

我正在尝试在流程正在进行时为标签添加动画效果。我希望它是这样的(逐帧):

Searching
Searching.
Searching..
Searching...
Searching

等等。我试过这样做:

    Timer _animationTimer = new Timer();

    private void StartAnimation()
    {
        myLabel.Text = "Searching";
        _animationTimer.Interval = 250;
        _animationTimer.Tick += new EventHandler(this.AnimationEvent);
        _animationTimer.Start();
    }

    private void StopAnimation()
    {
        _animationTimer.Stop();
    }

    private void AnimationEvent(object sender, EventArgs e)
    {
        if (!myLabel.Text.EndsWith("..."))
        {
            myLabel.Text += ".";
        }
        else
        {
            myLabel.Text = "Searching";
        }
    }

我这样使用它:

StartAnimation();
// ... do something.
StopAnimation();
myLabel.Text = "Something";

但它不起作用。它第一次运行时,它完美地动画。第二次它表明了这一点:

Searching..
Searching
Searching..
Searching

并且第三次显示:

Searching...
Searching..
Searching.
Searching
Searching...

并且它第四次没有动画。从第五次起,它就会经历这个循环。

这真的很吸引我。什么可能是错的?

1 个答案:

答案 0 :(得分:1)

每次启动时,StartAnimation()都会添加事件处理程序。这将导致你遇到的问题。

第二次调用StartAnimation()时,您将有两个事件处理程序连接到Tick事件。它会每250秒调用一次代码,而不是一次。所以你看到模式

Searching..
Searching
Searching..
Searching

第三次有三个事件处理程序并且你得到了模式

Searching...
Searching..
Searching.
Searching
Searching...

等等。第四次没有任何反应,因为它正在进行四次并返回到原始状态。

你可以移动

_animationTimer.Tick += new EventHandler(this.AnimationEvent);

在StartAnimation之外的行 - 或检查它是否为null并且仅在第一次添加它。