Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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#_Timer - Fatal编程技术网

C# 定时器+;显示消息+;不同的时间间隔

C# 定时器+;显示消息+;不同的时间间隔,c#,timer,C#,Timer,如何使用按钮以不同的时间间隔在C#表单应用程序上显示某些消息 比如: private void button1_Click(object sender, EventArgs e) { label1.Text = "string1"; [wait 3 seconds] label1.Text = "string2"; [wait 5 sec] label1.text="string 3"; [end] } 要完全按

如何使用按钮以不同的时间间隔在C#表单应用程序上显示某些消息

比如:

private void button1_Click(object sender, EventArgs e)
{
      label1.Text = "string1";

      [wait 3 seconds]

      label1.Text = "string2";

      [wait 5 sec]

      label1.text="string 3";

      [end]
}

要完全按照伪代码的建议执行,只需使用
Thread.Sleep()
代替
[wait x]
行即可。请注意,这可能会使UI在等待期间无响应

或者,您可以创建一个执行相同操作但不阻止UI线程的线程。唯一的问题是您必须在UI线程中定义委托,否则它将无法工作

private void button1_Click(object sender, EventArgs e)
{
    ThreadPool.QueueUserWorkItem(delegate()
    {
        label1.Text = "string1";
        Thread.Sleep(3000);
        label1.Text = "string2";
        Thread.Sleep(5000);
        //etc...
    });
}

您可以创建新线程、更改标签文本、休眠该线程等:

using System.Threading;



使用间隔为X毫秒的计时器,并在每个计时器滴答声时更新UI。跟踪接收到的计时器节拍数,以便知道使用哪个字符串。每次更新完成后,停止计时器

发布的其他解决方案可能更明智,但这一个非常简单

Form1包含一个名为Label1的简单标签和一个名为Button1的按钮

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

        t.Interval = 100;
        t.Tick += new EventHandler(t_Tick);
        t.Start();
    }

    Timer t = new Timer();
    int counter = 0;

    private void Button1_Click(object sender, EventArgs e)
    {
        t.Start();
    }

    void t_Tick(object sender, EventArgs e)
    {
        try
        {
            t.Enabled = false; //Disable timer so we don't start t_Tick when t_Tick is still runnnig

            if (counter == 0)
            {
                label1.Text = "string1";
                t.Interval = 3000;
            }
            if (counter == 1)
            {
                label1.Text = "string2";
                t.Interval = 5000;
            }
            if (counter == 2)
            {
                label1.Text = "string3";
                t.Stop(); //Stop timer
            }
            else
            {
                t.Enabled = true; //Resume timer
            }

            counter++;
        }
        catch (Exception ex)
        {
            MessageBox.Show("Never throw exception from timer..." + ex.Message);
        }

    }

非常感谢。

哦,我喜欢stakoverflow.com 我是这样做的。:) 谢谢所有温柔的男人:) 请评论我是怎么做的?我真的希望这一切发生在点击按钮

公共部分类主窗体:窗体{ 公共表格(

计时器myTimer=新计时器()

私有无效按钮1\u单击(对象发送者,事件参数e)

int计数器=0

    void myTimer_Tick(object sender, EventArgs e)
    {

        if (counter == 0)
        {
            label4.Text = "string1";
            myTimer.Interval = 2000;
        }
        if (counter == 1)
        {
            label4.Text = "string2";
            myTimer.Interval = 2000;
        }
        if (counter == 2)
        {
            label4.Text = "string3";
            myTimer.Stop(); 
        }
        else
        {
            myTimer.Enabled = true; 
        }
        counter++;
      } }
我用你们提供的有价值的例子来完成这一切。我把它们放在一起,让它们按照我想要的方式工作。
再次感谢大家:)

考虑到您已将此问题命名为“计时器”,您显然已经了解计时器。这正是您需要的。您已经尝试过了吗?您必须使用一些线程。当前代码仅显示字符串3。我认为您必须根据进程显示一些消息。我在Go for timer(如果间隔固定)中的建议或者去做地下工作者。是的,我试过定时器。但正如我说的,我在学习。所以我把一切都搞砸了。我在这里发帖之前试过一些:D你不知道他说了什么吗?他是c#的新手,所以最好从底层开始。我甚至不确定他是否会理解其他人都发了什么。重要的是理解到底是什么是Thread.Sleep()方法。当他遇到这些问题时,他可以进一步探索。;)因为生活会找到办法的。我不认为使用
Thread.Sleep()方法
是从底层开始的。你需要理解线程,才能理解它的功能,为什么你应该/不应该使用它,等等。我称之为相对底层。我确实理解其他人发布的内容。使用计时器。我尝试了所有线程。sleep()在这里发布之前。但后来一切都搞砸了。所以最后在这里被问到作为理由:)非常感谢你这么好的回答:)这些例子将帮助我了解更多。:)谢谢。很高兴听到这些,但如果你一直在寻找一个真正的计时工具,这实际上并不好。为此,使用计时器类谢谢:)…这个想法可能这就是我一直在寻找的:)以及如何通过点击按钮来开始这一切?@Ron:put't.start()“在按钮点击处理程序下。我还有一个问题。如果我用按钮启动它,它会在字符串3后停止,这是应该的。但是,如果我再次按下按钮,它不会再次启动ovr。你必须重置计数器。代码优化建议将非常受欢迎:)我是初学者/学习者。我是从这个计时器项目中制作的
private delegate void setLabelTextDelegate(string text);
private void setLabelText(string text)
{
    this.label1.Text = text;
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        t.Interval = 100;
        t.Tick += new EventHandler(t_Tick);
        t.Start();
    }

    Timer t = new Timer();
    int counter = 0;

    private void Button1_Click(object sender, EventArgs e)
    {
        t.Start();
    }

    void t_Tick(object sender, EventArgs e)
    {
        try
        {
            t.Enabled = false; //Disable timer so we don't start t_Tick when t_Tick is still runnnig

            if (counter == 0)
            {
                label1.Text = "string1";
                t.Interval = 3000;
            }
            if (counter == 1)
            {
                label1.Text = "string2";
                t.Interval = 5000;
            }
            if (counter == 2)
            {
                label1.Text = "string3";
                t.Stop(); //Stop timer
            }
            else
            {
                t.Enabled = true; //Resume timer
            }

            counter++;
        }
        catch (Exception ex)
        {
            MessageBox.Show("Never throw exception from timer..." + ex.Message);
        }

    }
    {
       myTimer.Tick += new EventHandler(myTimer_Tick);
       myTimer.Interval = 2000; 
       myTimer.Start();
    }
    void myTimer_Tick(object sender, EventArgs e)
    {

        if (counter == 0)
        {
            label4.Text = "string1";
            myTimer.Interval = 2000;
        }
        if (counter == 1)
        {
            label4.Text = "string2";
            myTimer.Interval = 2000;
        }
        if (counter == 2)
        {
            label4.Text = "string3";
            myTimer.Stop(); 
        }
        else
        {
            myTimer.Enabled = true; 
        }
        counter++;
      } }