Остановка System.Threading.Timer

191
26 июля 2021, 11:20

Возможно очень глупый вопрос от новичка. Буду рад прочесть все что скинете. Задался такой задачей. Как остановить таймер при определенном условии из другого метода? Как сделать это лучше?

static void Main () 
{
    Timer timer1 = new Timer(MyMethod, num, 0, 1000);
}
public static void MyMethod(object obj)
{
    Do something
}

Условно в методе что-то выполниться, если метод что-то находит, то dispose() таймер.

Answer 1

Вынести как поле (самый простой вариант)

static Timer timer1;
static void Main () 
{
    timer1 = new Timer(MyMethod, num, 0, 1000);
}
public static void MyMethod(object obj)
{
    timer1.Change(....);
}

Сделать функцию локальной

static void Main () 
{
    Timer timer1 = new Timer(MyMethod, num, 0, 1000);
    void MyMethod(object obj)
    {
        timer1.Change(....);
    }
}

Передать как параметр

static void Main () 
{
    Timer timer1 = null;
     timer1 = new Timer(MyMethod, new Func<Timer>(()=>timer1), 0, 1000);        
}
public static void MyMethod(object obj)
{
    var timer = ((Func<Timer>) obj)();
    timer.Change(....);
}
READ ALSO
Генерация паролей

Генерация паролей

Есть алфавит

225
Как отобразить результат XmlDiff?

Как отобразить результат XmlDiff?

Использую nuget библиотеку MicrosoftXmlDiffPatch, получаю результат сравнения двух xml с помощью XmlDiff

175
Как хранить ссылочные данные

Как хранить ссылочные данные

Что бы было проще, объясню на примере чатовЕсть пользовать П1, и есть пользователь П2, они между собой ведут беседу, естественно данные об их беседе...

236
MariaDB 10.3 тип данных Polygon

MariaDB 10.3 тип данных Polygon

Нужно перенести одну табличку с mysql 55 на mariadb 10

213