1

我正在尝试在进程进行时为标签设置动画。我希望它是这样的(逐帧):

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...

第四次它根本没有动画。从第五次开始,它会经历这个循环。

这真的很吸引我。有什么问题?

4

1 回答 1

1

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

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

Searching..
Searching
Searching..
Searching

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

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

等等。第四次什么都没有发生,因为它做了四次并返回到原始状态。

你可以移动

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

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

于 2012-10-28T20:13:15.227 回答