用于隐藏和显示表单的计时器的算法

时间:2018-07-13 18:49:24

标签: timer

您好,我目前正在使用Windows窗体制作一个潜意识的消息传递程序,我有一个出现的窗体,然后迅速消失了。

除了计时器的显示和隐藏表格的计时之外,我现在几乎可以正常工作。

我当前正在使用2个计时器

  1. 淋浴的间隔时间为1000
  2. 隐藏时间间隔为750秒。

现在,我知道这不是一个好选择,因为在表单显示后,隐藏表单所需的时间会不断变化。

我想不出一种算法,该算法可以使间隔以某种方式协同工作,因此显示表单然后隐藏不会改变,但仍会很快完成。

我需要在表单出现后尽快将其隐藏起来,但要在3-5秒内再次显示。

谢谢

1 个答案:

答案 0 :(得分:0)

您想要做的是链接您的计时器,启动和停止它们,以便它们保持间隔。

您说您希望表单在3-5秒后显示,然后在750ms后隐藏(计时器间隔记录为毫秒)。

如果我们将计时器Timer_Show和Timer_Hide以及表单实例称为SubForm,那么我们可以:

public partial class SubForm : Form
{
    public SubForm()
    {
        InitializeComponent();

        // This timer will show the screen
        Timer Timer_Show = new Timer();
        Timer_Show.Tick += Timer_Show_Tick;
        Timer_Show.Interval = 3000;
        Timer_Show.Enabled = true;

        // This timer will hide the screen
        Timer Timer_Hide = new Timer();
        Timer_Hide.Tick += Timer_Hide_Tick;
        Timer_Hide.Interval = 750;
        Timer_Hide.Enabled = false;
    }

    public void Timer_Show_Tick(object sender, EventArgs e)
    {
        Timer_Show.Stop();
        this.Show();
        Timer_Hide.Start();
    }

    public void Timer_Hide_Tick(object sender, EventArgs e)
    {
        Timer_Hide.Stop();
        this.Hide();
        Timer_Show.Start();
    }
}

我已将Timer实例化移动到构造函数中,以便您了解发生了什么情况。

首先,我们将Timer_Show间隔设置为3000ms(3秒)。然后,将Timer_Hide间隔设置为750ms。我们禁用Timer_Hide,但启用Timer_Show

3秒后,Timer_Show_Tick将触发。然后,它将禁用Timer_Show,显示SubForm的当前实例,然后启动Timer_Hide

然后在750毫秒后Timer_Hide_Tick触发,停止Timer_Hide,隐藏SubForm的当前实例,然后启动Timer_Start重新启动整个过程。

屏幕将始终在最后一次显示后3秒钟显示,并且将保持可见状态750ms。这样可以使您的显示/隐藏计时器保持同步。

如果要将3秒更改为其他时间,则可以实例化Random。例如

Random rand = new Random();

Random作为类级别变量,然后在调用Timer_Hide_Tick之前的Timer_Show.Start()中,可以调用Timer_Show.Interval = rand.NewRand(3000, 5000);,这将为3000和5000之间的随机数选择间隔值,因此显示屏幕的时间不一定总是上次显示的3秒。

您的屏幕显示/隐藏仍将保持同步,因此您永远不会陷入屏幕已经隐藏的情况下隐藏着火的情况。