игнор условия в таймере формы С# (WIN FORMS) VS2015

260
18 августа 2017, 23:28

Есть скрытая форма, на ней таймер, который срабатывает 1 раз в секунду, (это не вирус или воровайка какая), а программа, которая будет отслеживать новые файлы на ftp и загружать на рабочий компьютер, небольшая автоматизация рутины.

Код вроде как простой, но условие НЕ выполняется (в окне редактора, там где указаны строки, подчеркнут желтым цветом, "что это за..." - не знаю).

Стоит скинуть под условие MessageBox, все работает.

int ids = 0;
private void timer1_Tick(object sender, EventArgs e)
{
    ids = ids + 1;
    MessageBox.Show("я работаю!" + ids.ToString());
    if (ids == 2)
    {
        this.Close();
    }
}
Answer 1

Судя по всему, происходит следующее. Вызывается первый тик таймера, увеличивает ids до 1 и показывает MessageBox. Теперь код «висит» в функции Show().

Пока MessageBox открыт, проходит несколько секунд. Тем временем приходит второй тик таймера, увеличивает ids до 2 и показывает второй MessageBox.

Так же случается и с третьим, возможно четвёртым. Когда вы наконец закрываете все MessageBox'ы, значение ids уже стало большим. Условие ids == 2 больше не выполняется.

Когда вы заносите MessageBox.Show внутрь if'а, проверка выполняется до ожидания закрытия MessageBox'а, и всё работает как и ожидалось.

READ ALSO
Autofac when using IIndex<X,B> to resolve service throws exception

Autofac when using IIndex<X,B> to resolve service throws exception

Итак, у нас есть два класса, реализующих интерфейс IStateRepository: FileRepo and DBRepo (реализация вне контекста)И класс-потребитель:

190
Запись и чтение информации в и из listBox

Запись и чтение информации в и из listBox

Есть 2 textBox'а, один 1 другой второйВ них вписываю информацию в первый "Jule" во второй "June"

323
Проверка хоста C#

Проверка хоста C#

Здравстуйте, есть ip-адреса

222
Итоговый размер aes

Итоговый размер aes

Необходимо узнать размер выходных данных зашифрованных с помощью aes

209