TimerCallback & Timer C#. Вызывает только один раз

91
08 ноября 2021, 18:30

В конструкторе при создание класса создаю вот такой таймер

    public Calculate()
    {
        TimerCallback tm = new TimerCallback(AddToBase);
        Timer timer = new Timer(tm, 0, 5000, 5000);
    }

Метод AddToBase

public void AddToBase(object obj)
    {
        if ((02 == System.DateTime.Now.Hour) && (04 < System.DateTime.Now.Minute))
        {
            SaveDataModel saveDataModel = new SaveDataModel()
            {
                name = saveDataMode.name,
                surname = saveDataMode.surname,
                Time = DateTime.Now.Date.ToString()
            };
            DataBaseContext db = new DataBaseContext();
            db.AddBase(saveDataModel);
        }
    }

Ну и сам метод сохранения в базу. Тут все просто

public void AddBase(SaveDataModel saveDataMode)
    {
        using (DataPersonEntities db = new DataPersonEntities())
        {
            StrongData person = new StrongData()
            {
                name = saveDataMode.name,
                surname = saveDataMode.surname,
                Time = saveDataMode.Time
            };
            db.StrongDatas.Add(person);
            db.SaveChanges();
        }
    }

Вызывается метод с таймера только один раз. А должен регулярно. Проблема именно в строке db.AddBase(saveDataModel); Когда ее комментируешь, то метод вызывается регулярно как прописано в таймере. Мне нужно каждые 5 минут сохранять данные в базу. Пытался делать метод и всю цепочку асинхронной, не помогло, результат тот же. В чем проблема?

Answer 1

Решил проблему тем, что за юзал Observable в конструкторе, тогда метод продолжает вызываться.

public CalculateManager()
{
  var obs = Observable.Interval(TimeSpan.FromMinutes(5));
  obs.Subscribe(x => this.AddToBase());
}
READ ALSO
Не обновляется ListBox

Не обновляется ListBox

Пытаюсь разобраться с MVVM и написал небольшое приложениеДо определённого момента всё было прекрасно, но потом мой мозг сломался :( Итак есть...

106
C sharp Access data type mismatch in criteria expression

C sharp Access data type mismatch in criteria expression

Используется код для выборки всех колонок в таблице и дальнейшее применение к каждой функционала updateПри этом он на колонки типа integer как...

162
Как создать ValueObject без инкапсуляции?

Как создать ValueObject без инкапсуляции?

Класс CalculationResult<T> использует инкапсуляцию, чтобы задать контракт:

122