C#在启动另一个计时器之前等待计时器结束

时间:2017-02-05 17:36:48

标签: c# timer

您好我在Windform中制作用户界面并使用计时器。这对我来说都很新鲜,所以我对它的理解有点弱。我使用计时器制作侧面菜单动画。

第一个计时器是显示菜单。像这样:

private void ShowFullToolsTimer_Tick(object sender, EventArgs e)
    {
        FonctionsNatives.dessinerOpenGL();
        if (editionToolsMenu.Width >= 200)
            ShowFullTools.Stop();
        else
            editionToolsMenu.Width += 5;                
    }

隐藏侧边菜单我有类似的东西:

private void HideFullMenu_Tick(object sender, EventArgs e)
    {
         if (editionToolsMenu.Width > 0)
             editionToolsMenu.Width -= 5; 
         else
             HideFullMenu.Stop();
    }

我遇到的问题是我想在启动另一个动画之前完全完成一个动画。我一直在使用Application.DoEvent();如果timer.Enable是真的,但我知道这样做很糟糕并导致更多的错误。任何解决方案?

EDIT1:抱歉没有准确。当单击不同组件时,两个计时器都会启动。我也不能写两个结束,例如:     ShowfullMenu.Start():     HideFullMenu.Start(); 因为一个做+ =而另一个做= - 。他们会陷入无限循环。将线程置于睡眠状态会停止整个UI。

1 个答案:

答案 0 :(得分:0)

在为一个菜单设置动画时停止另一个计时器,然后在完成动画设置后重新启动它(反之亦然)。这是一些未经过测试的代码:

private void ShowFullToolsTimer_Tick(object sender, EventArgs e)
{
    FonctionsNatives.dessinerOpenGL();
    if (editionToolsMenu.Width >= 200)
    {
        ShowFullTools.Stop();

        // start the other one
        HideFullMenu.Start();
    }
    else
    {
        editionToolsMenu.Width += 5; 
        if (HideFullMenu.Enabled)
        {
            HideFullMenu.Stop();
        }
    }            
}