Показать ProgressDialog и вызвать OnBackPressed () после определенного периода - PullRequest
0 голосов
/ 13 сентября 2018

ProgressDialog должен отображаться в течение 5 секунд, после чего OnBackPressed () должно выполняться.В настоящее время ProgressDialog никогда не появляется на экране.Если я помещаю OnBackPressed () в диалоговое окно хода выполнения делегата, но я получаю ошибку, что OnBackPressed () должно выполняться из MainThread.Что я могу сделать?

private async SomeAsyncMethod()
{
   await ShowProgressDialog();
   ......
}

private Task ShowMessage()
        {
            var progressDialog = ProgressDialog.Show(this, "Bestandskorrektur", "Bestandskorrektur wird ausgeführt! Bite warten...", true);
            new Thread(new ThreadStart(delegate
            {
                Thread.Sleep(5000);
                RunOnUiThread(() => progressDialog.Hide());
                OnBackPressed(); // Gives error.
            })).Start();

            return Task.CompletedTask;
        }

ОБНОВЛЕНИЕ: Решение на основе ответов:

var pd = ProgressDialog.Show(this, "Bestandskorrektur", "Bestandskorrektur wird ausgeführt! Bitte warten...", true);
                var h = new Handler();
                void action()
                {
                    RunOnUiThread(() => pd.Hide());
                    OnBackPressed();
                }
                h.PostDelayed(action, 5000);

Ответы [ 2 ]

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

onBackPressed () должен вызываться из потока пользовательского интерфейса.Даршан предложил правильный ответ.Если вы хотите обновить пользовательский интерфейс из фонового потока (в этом случае потока, ожидающего завершения вашего таймера), вы должны использовать Handler.Вместо резьбы замените

new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //Do your work here

                    }
                }, /*Delay in miliseconds*/ );
0 голосов
/ 13 сентября 2018

Попробуйте использовать Handler (). PostDelayed (), как показано ниже -

new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //hide progressbar
                        onBackPressed();
                    }
                }, 5000);
...