Как остановить или указать начальное значение для таймера в Reactive Extensions - C#

Узнай цену своей работы

Формулировка задачи:

Хай народ, мне нужно сделать свой таймер, потому что стандартный System.Timers.Timer работает некорректно Для этого нагуглил расширение Reactive. И вот в нем есть куча всяких штучек непонятных. Мне нужно могти запускать таймер, когда нужно, и чтобы счет тиков таймера начинался с определенного значения. Еще надо уметь приостанавливать таймер, ну ставить на паузу. Так вот, что я осилил:
 class Program
    {
        static void Main(string[] args)
        {
            var observ = Observable.Publish(Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds(500)),10000);
            //каждые 500 миллисекунд будет выполнятся какой-то метод, отсчет начинается с 10000
            observ.Subscribe(method); //указываю, какой метод будет выполняться
            observ.Connect(); //таймер начал работать
           
            Console.Read();
        }
 
        static void method(long t) //сюда передается счетчик таймера, то есть число уже произошедших тиков таймера
        {
            Console.WriteLine(t); //просто вывожу это число
        }
    }
проблема в том, что я не знаю, как остановить или приостановить работу этого таймера и еще одна проблема в том, что счетчик таймера начинает отсчет не с 10000, вернее с 10000, но не совсем, на картинке все видно. Поясните, пазязя, как мне остановить таймер и как начать его выполнение с нужного значения? ну чтобы счетчик этот считался с 10000, например.

Решение задачи: «Как остановить или указать начальное значение для таймера в Reactive Extensions»

textual
Листинг программы
       private DateTime startTime;
 
        private void Form1_Load(object sender, EventArgs e)
        {
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 50;
            timer.Elapsed += Handler;
            StartTime=DateTime.Now;
            timer.Start();
        }
 
        private void Handler(object sender, ElapsedEventArgs e)
        {
            textBox1.Invoke(new Action(() => { textBox1.Text = ((DateTime.Now - startTime).TotalMilliseconds/50).ToString(); }));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы