ПрогрессДиалог должен отображаться в течение 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);
Попробуйте использовать 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?
в onBackpressed () проверьте progressDialog, затем закройте его.