代码之家  ›  专栏  ›  技术社区  ›  bigb055

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

  •  0
  • bigb055  · 技术社区  · 6 年前

    进度对话框 应该显示5秒之后 OnBackPressed() 应该执行。目前 从不出现在屏幕上。如果我将OnBackPressed()放在委托进度对话框中,则会显示一个错误消息 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);
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Darshan    6 年前

    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //hide progressbar
                            onBackPressed();
                        }
                    }, 5000);
    
        2
  •  1
  •   Siddharth Utgikar    6 年前

    onBackPressed()应该从UI线程调用。达珊所建议的是正确的答案。当您想从后台线程(在本例中是等待计时器完成的线程)更新UI时,应该使用Handler。替换螺纹

    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //Do your work here
    
                        }
                    }, /*Delay in miliseconds*/ );