我想用Xamarin创建用于android的计时器线程

Luj*_*ska 7 c# multithreading android xamarin

如何以1秒的间隔或"While(True)"循环以1秒的线程睡眠代码运行此代码?

private void GetCodeOnServer()
{

     WebClient _client = new WebClient();

     string _code = _client.DownloadString(new Uri(@"http://myUrl/car"));

     Toast.MakeText(this, "Code: " + _code, ToastLength.Long).Show();


}
Run Code Online (Sandbox Code Playgroud)

小智 18

如果您需要以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)
    {

    }
Run Code Online (Sandbox Code Playgroud)

然后OnTimedEvent将每秒触发,您可以在异步任务中进行调用.

  • 如果要修改"OnTimedEvent"上的任何视图属性,则应使用"RunOnUiThread(()=> SomethingOnTheUIThread);" (4认同)
  • 如果您想要一次事件,只需设置timer.AutoReset = false;即可。 (2认同)

小智 0

您将无法在 Activity 主线程上调用 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
        }
    }
Run Code Online (Sandbox Code Playgroud)