Timer 隐藏和显示窗体的计时器算法

Timer 隐藏和显示窗体的计时器算法,timer,Timer,嗨,我现在正在windows窗体中制作一个潜意识消息程序,我有一个窗体,它出现后很快就会消失 我现在几乎所有的东西都在工作,除了计时器的计时,它会显示然后隐藏表单 我目前使用2个计时器 淋浴计时器的间隔为1000次 隐藏计时器的间隔为750 现在我知道这不是一个好的选择,因为表单一旦出现,隐藏所需的时间会不断变化 我想不出一个算法,可以让时间间隔在某种程度上协同工作,从而使窗体的显示和隐藏不会改变,但仍然可以快速完成 我需要的形式是隐藏得很快,一旦它出现,但不被再次显示约3-5秒 谢谢您要做的是

嗨,我现在正在windows窗体中制作一个潜意识消息程序,我有一个窗体,它出现后很快就会消失

我现在几乎所有的东西都在工作,除了计时器的计时,它会显示然后隐藏表单

我目前使用2个计时器

  • 淋浴计时器的间隔为1000次
  • 隐藏计时器的间隔为750
  • 现在我知道这不是一个好的选择,因为表单一旦出现,隐藏所需的时间会不断变化

    我想不出一个算法,可以让时间间隔在某种程度上协同工作,从而使窗体的显示和隐藏不会改变,但仍然可以快速完成

    我需要的形式是隐藏得很快,一旦它出现,但不被再次显示约3-5秒


    谢谢

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

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

    如果我们调用timers Timer\u Show和Timer\u Hide,并将表单实例称为子表单,那么我们可以:

    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();
        }
    }
    
    我已经将计时器实例化移到了构造函数中,这样您就可以看到发生了什么

    首先,我们将计时器的显示时间间隔设置为3000ms(3秒)。然后我们将
    计时器\u Hide
    间隔设置为750ms。我们禁用
    Timer\u Hide
    ,但启用
    Timer\u Show

    3秒钟后,
    定时器显示勾号
    将启动。这将禁用
    Timer\u Show
    ,显示
    子表单的当前实例
    ,然后启动
    Timer\u Hide

    然后在750ms后
    Timer\u Hide\u Tick
    激发,停止
    Timer\u Hide
    ,隐藏
    子窗体的当前实例
    ,然后启动
    Timer\u Start
    以重新启动整个过程

    屏幕将始终在上次显示后3秒显示,并在750ms内保持可见。这将使您的显示/隐藏计时器保持同步

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

    Random rand = new Random();
    
    Random
    作为类级变量,然后在调用
    Timer\u Hide\u Tick
    之前,在
    Timer\u Show.Start()中调用
    Timer\u Show.Interval=rand.NewRand(3000,5000)
    将为间隔值选择一个介于3000和5000之间的随机数,因此显示屏幕并不总是在上次显示后3秒


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

    您如何定义间隔?它如何转换成秒?另外,如果你想让表单每次打开相同的时间,你不能让两个计时器在相同的时间间隔内交错吗?我在表单上使用两个时间间隔计时器,一个隐藏表单,另一个则将表单返回。我想时间间隔是滴答滴答的,我不太确定计时器是如何工作的,我只是把它们拖放到windows窗体上。并在属性上设置间隔