带有5个文本框c#的定时器延迟

本文关键字:定时器 延迟 5个 文本 带有 | 更新日期: 2023-09-27 18:27:41

我想创建一个类似自动打字机的东西。

我有5个文本框,我正在使用计时器。

我希望在每个文本框发送的文本之间有5秒的"暂停/延迟"。

这是我的Timer_Tick事件:

private void Timer_Tick(object sender, EventArgs e)
    {
        if (txt1.Text != string.Empty)
        {
            SendKeys.Send(this.txt1.Text);
            SendKeys.Send("{ENTER}");
        }
        if (txt2.Text != string.Empty)
        {
            SendKeys.Send(this.txt2.Text);
            SendKeys.Send("{ENTER}");
        }
        if (txt3.Text != string.Empty)
        {
            SendKeys.Send(this.txt3.Text);
            SendKeys.Send("{ENTER}");
        }
        if (txt4.Text != string.Empty)
        {
            SendKeys.Send(this.txt4.Text);
            SendKeys.Send("{ENTER}");
        }
        if (txt5.Text != string.Empty)
        {
            SendKeys.Send(this.txt5.Text);
            SendKeys.Send("{ENTER}");
        }
    }

当我使用timer.Interval = 5000时,我的应用程序每5秒发送一次所有文本框的值,但我希望每个文本框之间有5秒的延迟。

这可能吗?我不想使用System thread sleep,因为应用程序将被冻结。。

带有5个文本框c#的定时器延迟

生成全局变量

int time = 0;

那么你的代码可以是…

private void Timer_Tick(object sender, EventArgs e)
{
    switch (time%5)
        {
            case 0:
                if (txt1.Text != string.Empty)
                    SendKeys.Send(this.txt1.Text);
                break;
            case 1:
                if (txt2.Text != string.Empty) 
                    SendKeys.Send(this.txt2.Text);
                break;
            //finish the switch
        }
        SendKeys.Send("{ENTER}");
        time++;
    }
}

你甚至可以使用

this.Controls.Find("txt"+(time%5 + 1))

使用5个不同的计时器,每个计时器1个或以上答案。

开始将所有文本框放入集合:

private List<Textbox> textboxes = new List<Textbox>(){txt1, txt2, txt3};

有一个变量来跟踪下一个要显示的文本框:

private int nextTextBox = 0;

现在把所有的东西放在一起:

private void Timer_Tick(object sender, EventArgs e)
{
    var textbox = textboxes[nextTextBox];
    nextTextBox = (nextTextBox + 1) % textboxes.Count; //you can put this inside the if if that's what you want
    if (!string.IsNullOrEmpty(textbox.Text))
    {
        SendKeys.Send(textbox.Text);
        SendKeys.Send("{ENTER}");
    }
}