Xamarin Timer не работает, пока говорит - PullRequest
0 голосов
/ 19 июня 2020

У меня есть этот код

Color[] colours = new Color[5]{Color.Red, Color.Blue, Color.Green, Color.Yellow, Color.Black};


    public int randGen(int lower, int upper)
    {
        Random random = new Random();
        return random.Next(lower, upper);
    }

    public PlayGame()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        changeColour();
    }

    public void changeColour()
    {
        int milliseconds = randGen(1000, 5000);
        int count = 0;
        Device.StartTimer(TimeSpan.FromMilliseconds(milliseconds), () =>
        {
            var layout = new StackLayout { Padding = new Thickness(5, 10) };
            var label = new Label { Text = "Time: ", TextColor = Color.Green, FontSize = 25 };
            layout.Children.Add(label);

            label.Text += milliseconds.ToString();
            this.Content = layout;

            if (count < 4)
            {
                BackgroundColor = colours[count];
                count++;

                milliseconds = randGen(1000, 5000);
                return true;
            }
            else
            {
                BackgroundColor = Color.Black;
                return false;
            }

        }
        );

    }

Который имеет массив цветов. Идея состоит в том, что каждые 1-5 секунд (которые должны быть случайными каждый раз) цвет фона должен меняться, а в тексте должно быть указано, как долго экран был включен.

Однако в настоящее время отображается время в тексте не отражается время, отображаемое на каждом экране, и у меня есть некоторые предположения, что миллисекунды в:

Device.StartTimer(TimeSpan.FromMilliseconds(milliseconds)

не меняются вообще. Есть идеи?

1 Ответ

1 голос
/ 19 июня 2020

это то, что я бы сделал - пусть ваш таймер срабатывает каждую секунду (или с любой другой степенью детализации, которая вам нужна), но выполнять ваш код только каждые X раз

using System.Timers;

// these are class variables
Timer timer;
int timecount = 0;
// adjust this dynamically so your code only executes every 1-n seconds
int interval = 1;

// to this wherever you want to start the timer
timer = new Timer();
timer.Elapsed += Timer_Elapsed;
// fire every 1 sec
timer.Interval = 1000;
timer.Start();

// timer event handler
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
    timecount++;

    if (timecount == interval)
    {
      timecount = 0;

      // do other stuff here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...