Любая причина, почему Winforms Timer не тикает? - PullRequest
0 голосов
/ 01 февраля 2019

В моем приложении для Windows запущено несколько таймеров.Каждый timer_tick запускает код.Сейчас я работаю над двумя процессами.

private async void tmrProcessDelay_Tick
private async void tmrAutopay_Tick

Совсем недавно добавили tmrAutopay как добавленный процесс, так что вместо последовательного процесса я заставил их работать одновременно.У меня проблема в том, что я не могу перезапустить процесс автооплаты.

Таймеры объявляются вверху как экземпляр при загрузке формы.

private System.Windows.Forms.Timer tmrProcessDelay = new System.Windows.Forms.Timer();
private System.Windows.Forms.Timer tmrAutopay = new System.Windows.Forms.Timer();

tmrAutopay.Interval = 2000;
tmrAutopay.Enabled = false;
tmrAutopay.Tick += new EventHandler(tmrAutopay_Tick);

private async void tmrAutopay_Tick(object sender, EventArgs e)
    {
        messagebox("tick"); // correcting this one
        txtNotes.AppendText("tick"); 
        tmrAutopay.Enabled = false;
        // do some code
        tmrAutopay.Enabled = true;
    }

РЕДАКТИРОВАТЬ: в соответствии с Майкл Рэндалл предложение, я попытался добавить точку останова в верхней части.Я получил вопрос.Просто по логике.Я просто подумал, что он не начинается снова, потому что «галочка» добавляется только один раз, поэтому я предположил, что он запускается только один раз.Когда я продолжил добавлять точку останова, она снова отмечалась, но по какой-то причине это не appendText, потому что я все-таки принял на себя.Возвращаясь к проблеме, из-за существующей логики, после того, как

  1. вызвал тик один - appendtext
  2. enabled = true - отмечен, но не добавлен
  3. из-залогика, он не перешел к enabled = true снова

Тик таймера запускается только после того, как я включил его в первый раз, затем, когда его тики, я установил в false, чтобы сделать некоторый код, затем запустить егоснова после окончания.

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

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы хотите сделать как фоновый процесс, вы можете сделать приложение окна службы и реализовать более одного таймера в этом коде.У меня был хороший опыт работы с этим типом приложения, и я уверен, что он будет работать без проблем с несколькими таймерами.единственное, что вам нужно быть осторожным в коде, это то, что в случае, если какой-то код занимает больше времени, чем ожидалось, и больше, чем интервал таймера, он запустит другой поток, который может оказаться тупиковым для этого таймера или вызвать сбой приложения.Каждый таймер работает независимо и создает новый поток каждый раз, когда он тикает.

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