簡體   English   中英

如何使用 Xamarin 創建在后台運行的計時器而不阻塞 UI 線程?

[英]How to create a timer running in the background without blocking the UI thread with Xamarin?

我想運行一個類似於以下代碼的代碼塊。 該代碼的目的是在不阻塞 UI 線程的情況下以一秒為周期發出一次 HTTP 請求。

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

如果您需要以 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 將每秒觸發一次,您可以在異步任務中進行調用。

您將無法在 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
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM