ViewDidAppear вызывает исчезновение моего ярлыка (Xamarin.ios, C #) - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу перейти на новый View Controller, когда таймер обратного отсчета, здесь установленный на 10 секунд, достигает 0 секунд. это делается с помощью логики потока ниже. на этикетке обычно отображается обратный отсчет «10, 9, 8, 7», но поскольку я использовал ViewDidAppear, он не отображается. в конце он мигнет 0 секунд, и произойдет переход. мне нужен обратный отсчет, чтобы показать все время, и я не могу понять, как и почему он исчезает

с использованием System.Timers; используя System.Threading;

... частный System.Timers.Timer mytimer; private int countSeconds;

...

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        mytimer = new System.Timers.Timer();
        //Trigger event every second
        mytimer.Interval = 1000;  //1000 = 1 second
        mytimer.Elapsed += OnTimedEvent;
        countSeconds = 10; // 300 seconds           
        mytimer.Enabled = true;
        mytimer.Start();

    }

    private void OnTimedEvent(object sender, ElapsedEventArgs e)
    {

        countSeconds--;
        int seconds = countSeconds % 60;
        int minutes = countSeconds / 60;
        string DHCountdownTime = (countSeconds / 60).ToString() + ":" + (countSeconds % 60).ToString("00");  //to give leading 0. so 9 seconds isnt :9 but :09
        InvokeOnMainThread(() =>
        {
            lblTimer.Text = DHCountdownTime;
        });


        if (countSeconds == 0)
        {
            mytimer.Stop();

        }
    }

...
    public override void ViewDidAppear(bool animated)
    {            
        base.ViewDidAppear(animated);
        Thread.Sleep(countSeconds * 1000);                    
        PerformSegue("DHSegue", this);

...

1 Ответ

0 голосов
/ 04 сентября 2018

Ваш Thread.Sleep блокирует поток пользовательского интерфейса:

Thread.Sleep(countSeconds * 1000);             

Используйте задачу (или другой поток), чтобы позволить потоку пользовательского интерфейса продолжать обрабатывать сообщения:

await Task.Delay(countSeconds * 1000);
...