Отрицательные миллисекунды в программе - PullRequest
0 голосов
/ 02 июня 2018
      //Global variables
bool pause;

        TextView ClickToStart;
        TextView ClickAsSoonAsPossible;
        TextView Tries;
        TextView TriesCount;
        TextView AverageMs;
        TextView AverageMsCount;
        Button ScreenClickButton;
        System.Timers.Timer timer1;
        Color currentColor = Color.White;
        Random rnd = new Random();
        DateTime startTime1;
        DateTime endTime1;
        int secondsToFormat;

        int ClicksCount = 0;



  private void Timer1_Elapsed(object sender, ElapsedEventArgs e)
                {
                    RunOnUiThread(() =>
                    {
                        Toast.MakeText(this, "Timer", ToastLength.Short).Show();
                        currentColor = Color.Green;
                        ScreenClickButton.SetBackgroundColor(currentColor);
                    });
                    timer1.Stop();
                    startTime1 = DateTime.Now;
                }


            private void ClickCount(object sender, EventArgs e)
            {
                if (currentColor == Color.White)
                {

                    currentColor = Color.Red;
                    ScreenClickButton.SetBackgroundColor(currentColor);
                    int seconds = rnd.Next(1, 5);
                    Toast.MakeText(this, "Seconds:" + seconds, ToastLength.Short).Show();
                    timer1.Interval = seconds * 1000;
                    timer1.Start();

                }
                else if (currentColor == Color.Green)
                {
                    endTime1 = DateTime.Now;
                    ClicksCount++;

                    secondsToFormat =endTime1.Millisecond - startTime1.Millisecond;

     AverageMsCount.Text = secondsToFormat.ToString();

                   // if(secondsToFormat>=1000)
                 //   {
                 //       AverageMs.Text = ((endTime1 - startTime1).Milliseconds).ToString();
                 //   }

                    currentColor = Color.White;
                    ScreenClickButton.SetBackgroundColor(currentColor);
                }
                else if (currentColor == Color.Red)
                {

                    currentColor = Color.White;
                    ScreenClickButton.SetBackgroundColor(currentColor);
                }


                //Toast.MakeText(this, "You clicked me " + ClicksCount + "times", ToastLength.Short).Show();
                if (ClicksCount == 1)

                    AverageMsCount.Text = secondsToFormat.ToString();
                TriesCount.Text = "1";

                if (ClicksCount == 2)
                {
                    secondsToFormat = secondsToFormat / 2;
                    AverageMsCount.Text = secondsToFormat.ToString();

                    TriesCount.Text = "2";

                }
                if (ClicksCount == 3)
                {
                    secondsToFormat = secondsToFormat / 3;
                    AverageMsCount.Text = secondsToFormat.ToString();
                    TriesCount.Text = "3";
                }
                if (ClicksCount == 4)
                {
                    secondsToFormat = secondsToFormat / 4;
                    AverageMsCount.Text = secondsToFormat.ToString();
                    TriesCount.Text = "4";

                }

                if (ClicksCount == 5)
                {
                    secondsToFormat = secondsToFormat / 5;
                    AverageMsCount.Text = secondsToFormat.ToString();
                    TriesCount.Text = "5";
                }


                if (Click`enter code here`sCount == 6)
                {
                    ClicksCount = 1;

                }



            }

Привет, ребята, я пытаюсь сделать что-то подобное на Android Xamarin: https://www.humanbenchmark.com/tests/reactiontime/.Таким образом, после первого клика возврат миллисекунд будет отрицательным, как -525.После нескольких щелчков она становится выше, пока, наконец, не станет положительной.Может ли кто-нибудь объяснить, почему это отрицательно?Таймер истек в основном для того, чтобы зеленый экран появлялся в случайное время. После его появления мой счет в миллисекундах начинается.И когда нажал на зеленую кнопку, он закончил.Буду очень признателен за любую помощь.

1 Ответ

0 голосов
/ 02 июня 2018

Это проблема:

secondsToFormat = endTime1.Millisecond - startTime1.Millisecond;

Свойство Millisecond равно "миллисекунде в секунде".Итак, предположим, что у нас есть:

startTime1 = 2018-06-02T18:52:30.750Z 
endTime1 = 2018-06-02T18:52:31.100Z

... который даст вам результат -650мс, потому что startTime1.Millisecond равен 100, а endTime1.Millisecond равен 750.

В идеале:

  • Для этого вообще не используйте DateTime: используйте Stopwatch, который вы сбрасываете и запускаете всякий раз, когда вы хотите начать отсчет времени, затем используйте свойство Elapsed, чтобы получить TimeSpanвсякий раз, когда вы хотите узнать, сколько времени прошло.Используйте свойство TotalMilliseconds этого TimeSpan, чтобы узнать, сколько миллисекунд прошло.(В качестве альтернативы используйте Stopwatch.ElapsedMilliseconds.)
  • Если у вас есть , чтобы продолжать использовать DateTime
    • Используйте DateTime.UtcNow вместо DateTime.Now, так что если вашпользователь запускает это через границу изменения смещения часового пояса (например, для перехода на летнее время), вы не получите странные результаты
    • . Примите разницу между двумя значениями как TimeSpan, например, endTime1 - startTime1,а затем снова используйте свойство TotalMilliseconds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...