Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使标签出现和消失的计时器非常缓慢且无响应_C#_.net_Winforms_Visual Studio - Fatal编程技术网

C# 使标签出现和消失的计时器非常缓慢且无响应

C# 使标签出现和消失的计时器非常缓慢且无响应,c#,.net,winforms,visual-studio,C#,.net,Winforms,Visual Studio,我希望这样,当单击表单时,标签将显示x毫秒。然后消失了 顺便说一句,我试着用timer1.Start()替换timer1.Enabled=true,用timer1.Stop()替换timer1.Enabled=false,但没有什么区别 这是我的密码。我有一个表单,我以编程方式创建了一个标签,并将其添加到表单中,我还以编程方式创建了一个计时器。间隔设置为300毫秒(我可能会在以后减少,但现在是300毫秒) 其思想是标签从.code>Visible=false开始,然后单击表单时,标签应在300毫

我希望这样,当单击表单时,标签将显示x毫秒。然后消失了

顺便说一句,我试着用
timer1.Start()
替换
timer1.Enabled=true
,用
timer1.Stop()
替换
timer1.Enabled=false
,但没有什么区别

这是我的密码。我有一个表单,我以编程方式创建了一个标签,并将其添加到表单中,我还以编程方式创建了一个计时器。间隔设置为300毫秒(我可能会在以后减少,但现在是300毫秒)

其思想是标签从.code>Visible=false开始,然后单击表单时,标签应在300毫秒内变为可见,然后变为不可见。我试图做到这一点,在计时器第一次运行时,即启用后,使标签可见,第二次使标签不可见

我管理它,即使不需要计算计时器运行的次数,我也可以简单地说,如果标签不可见(这必须是计时器第一次运行刚刚启用),则使其可见,如果标签可见(即,它必须是计时器第二次运行)然后使其不可见并禁用计时器

问题是它反应迟钝,反应不快。我点击,我有一个
MouseDown
的事件,但是在这和标签出现之间有一个延迟

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication16
{
    public partial class Form1 : Form
    {

        Label label1;
        Timer timer1;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            timer1 = new Timer();
            timer1.Interval = 300;
            timer1.Tick += timer1_Tick;

            label1 = new Label();
            label1.Text = "blah";
            label1.Visible = false;
            this.Controls.Add(label1);            
        }

        private void timer1_Tick(object sender, EventArgs e)
        {

            if (label1.Visible == false) { label1.Visible = true;  } 
            else { label1.Visible = false; timer1.Enabled = false; }

        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            timer1.Enabled = true;
        }

    }
}

原因是启用计时器后,它不会立即运行tick方法。如果将时间间隔延长到3000毫秒,则可以清楚地看到这一点。鉴于这一事实,解决方案就是这样

    private void timer1_Tick(object sender, EventArgs e)
    {
        label1.Visible = false;
        timer1.Enabled = false;
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        label1.Visible = true;
        timer1.Enabled = true; //will wait timer1.interval milliseconds then run tick           
    }

原因很简单,我也会给出答案,这证实了启用和禁用,以及启动和停止之间没有区别。原因是启用计时器后,它不会立即运行tick方法。惊奇,惊奇..@TaW如果你要引用我或任何人的话,那就用引号。我在评论中用斜体,在问答中用引号。@TaW这不是标准惯例。你仍然应该在引语周围使用引号,否则你应该包括一些明确的指示,表明你在引用,例如,用你写的词在引语前面,否则你不清楚你在引用。哇,你真的在教育我。但正如我所说的,我照着做。如果你不喜欢,为什么不删除你“问题”的“答案”?(注意引号;-)