显示ProgressDialog并在一定时间后调用OnBackPressed()

时间:2018-09-13 17:07:53

标签: android android-asynctask xamarin.android progressdialog

ProgressDialog 应该显示5秒钟,然后执行 OnBackPressed()。当前, ProgressDialog 永远不会出现在屏幕上。如果我在委派进度对话框中放入OnBackPressed(),但随后出现错误,提示应从MainThread执行 OnBackPressed()。我该怎么办?

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);

1 个答案:

答案 0 :(得分:2)

尝试使用如下所示的Handler()。postDelayed()-

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