如何在不使用 Xamarin 阻止 UI 线程的情况下创建在后台运行的计时器

本文关键字:情况下 创建 运行 计时器 线程 后台 阻止 Xamarin UI | 更新日期: 2023-09-27 18:32:22

我想运行一个类似于以下代码的代码块。代码的目的是在一秒钟的时间段内发出 HTTP 请求,而不会阻塞 UI 线程。

private void GetCodeFromTheServer()
{
   
     WebClient client = new WebClient();
    
     string code = client.DownloadString(new Uri(@"http://example.com/code"));
    
     Toast.MakeText(this, "Code: " + code, ToastLength.Long).Show();
}

如何在不使用 Xamarin 阻止 UI 线程的情况下创建在后台运行的计时器

如果您需要以 1 秒的间隔执行某些操作,则可以为此使用计时器。我自己在Xamarin.Android中使用过这样的代码:

   private void CountDown ()
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 1000; 
        timer.Elapsed += OnTimedEvent;
        timer.Enabled = true;

    }
    private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
    {
    }

然后,OnTimedEvent 将每秒触发一次,您可以在异步任务中执行调用。

您将无法在活动主线程上调用 Web。使用异步任务执行代码。异步任务将在后台运行,下载内容时将显示 Toast。下面的示例将有所帮助。

private class GetStringTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            String str = "...";
            /** String From Web **/
            return str;
        }
        @Override
        protected void onPostExecute(String address) {
            // Show Toast Here
        }
    }