Показать ProgressDialog и вызвать OnBackPressed () через определенный период

ПрогрессДиалог должен отображаться в течение 5 секунд, после чего OnBackPressed () должен выполняться. В настоящее время ПрогрессДиалог никогда не появляется на экране. Если я помещаю 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);

в onBackpressed () проверьте progressDialog, затем закройте его.

iamkdblue 13.09.2018 19:16
0
1
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

                    }
                }, /*Delay in miliseconds*/ );

Как использовать Runnable () в Monodroid?

bigb055 13.09.2018 20:13

Другие вопросы по теме