Измерение выполнения кода при отображении времени, прошедшего каждую секунду в C # - PullRequest
0 голосов
/ 19 октября 2019

Мне интересно, как лучше всего добиться этого в Windows Forms - мне нужно окно, показывающее, сколько времени прошло (1 с 2 с и т. Д.) До 90 секунд во время выполнения кода. У меня сейчас таймер реализован следующим образом, но я думаю, что мне также нужен там секундомер, поскольку таймер блокирует основной поток.

 static System.Timers.Timer pXRFTimer = new System.Timers.Timer();       
  static int _pXRFTimerCounter = 0;


   private void ScanpXRF()
        {
            _pXRFTimerCounter = 0;
            pXRFTimer.Enabled = true;
            pXRFTimer.Interval = 1000;
            pXRFTimer.Elapsed += new ElapsedEventHandler(pXRFTimer_Tick);
            pXRFTimer.Start();

            //START action to be measured here!
            DoSomethingToBeMeasured();

        }

        private static void pXRFTimer_Tick(Object sender, EventArgs e)
        {
            _pXRFTimerCounter++;

            if (_pXRFTimerCounter >= 90)
            {
                pXRFTimer.Stop();             
            }
            else
            {
                //show time elapsed
            }
        }

1 Ответ

0 голосов
/ 19 октября 2019

Я не уверен насчет механики вашего приложения, но прошедшее время можно посчитать примерно так:

DateTime startUtc;

private void ScanpXRF()
{
  startUtc = DateTime.NowUtc;
  (...)

  //START action to be measured here!
}

private static void pXRFTimer_Tick(Object sender, EventArgs e)
{
  var elapsed = DateTime.NowUtc - startUtc;
  var elapsedSeconds = elapsed.TotalSeconds; // double so you may want to round.
}
...