Как использовать таймер для нажатия кнопок в C# - PullRequest
0 голосов
/ 06 января 2020

Как использовать таймеры для запуска события нажатия кнопки каждые 3 секунды?

Я пытаюсь повернуть 2 изображения в ящиках с картинками, автоматически нажимая кнопку поворота с помощью таймера, но, похоже, это не работает. Я никогда не использовал таймер раньше, так что это мой первый раз. Кто-нибудь знает, что не так с моим кодом или другим предложением кода для него? Спасибо

Код, который я использую

        private void timer1_Tick(object sender, EventArgs e)
        {
            rotateRightButton_Click(null, null);
            pictureBox1.Refresh();
            pictureBox2.Refresh();
        }
        private void timerStartButton_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }
        private void timerStopButton_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }

Ответы [ 2 ]

1 голос
/ 06 января 2020

Это даже возможно (и более просто) с задачами

public partial class Form1 : Form
{
    // variable to keep track if the timer is running.
    private bool _timerRunning;

    public Form1()
    {
        InitializeComponent();
    }

    private async Task StartTimer()
    {
        // set it to true
        _timerRunning = true;

        while (_timerRunning)
        {
            // call the rotateRightButton_Click (what you want)
            rotateRightButton_Click(this, EventArgs.Empty);
            pictureBox1.Refresh();
            pictureBox2.Refresh();
            // wait for 3 seconds (but don't block the GUI thread)
            await Task.Delay(3000);
        }
    }

    private void rotateRightButton_Click(Form1 form1, EventArgs empty)
    {
       // do your thing
    }

    private async void buttonStart_Click(object sender, EventArgs e)
    {
        // if it's already started, don't start it again.
        if (_timerRunning)
            return;

        // start it.
        await StartTimer();
    }

    private void buttonStop_Click(object sender, EventArgs e)
    {
        // stop it.
        _timerRunning = false;
    }
}
0 голосов
/ 06 января 2020
timer1.Interval = 3000; // set interval to 3 seconds and then call Time Elapsed event

timer1.Elapsed += Time_Elapsed;


//Event
private void Time_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
       // will be triggered in every 3 seconds
        rotateRightButton_Click(null, null);
        pictureBox1.Refresh();
        pictureBox2.Refresh();
 }

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...