0

I need to run a method every 5 seconds using Mono for Android. Is there a scheduled timer in Android? I have tried this code, however, it fails to start:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Glass.Core.Interfaces;
using Glass.Core;
using Java.Util;

namespace Glass.UI.AN
{
[Application(Label = "Glass", Icon = "@drawable/icon")]
public class GlassApplication : Application
{
    Context context;

    public GlassApplication (IntPtr handle, JniHandleOwnership transfer)
        : base(handle, transfer)
    {
        this.context = BaseContext;
    }

    public override void OnCreate ()
    {
        base.OnCreate ();
        Timer timer = new Timer ();
        timer.ScheduleAtFixedRate (new CustomTimerTask(context), new Date(DateTime.Now.Year, DateTime.Now.Month, 
        DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute), 5000);
    }
}

public class CustomTimerTask: TimerTask
{
    Context context;

    public CustomTimerTask(Context context)
    {
        this.context = context;
    }

    public override void Run ()
    {
        GlassWebServiceProvider p = new GlassWebServiceProvider (context);
        p.SendCardReaders ();
    }
}

}

4

2 回答 2

3

我有同样的问题,我必须在一段时间后启动服务。

        DateTime dt = DateTime.Now;
        t1 = new System.Timers.Timer(200);
        t1.Elapsed += new ElapsedEventHandler(OnTimeEvent);
        t1.Interval = 4000;
        t1.Enabled = true;
        t1.Start();
    }
    private void OnTimeEvent(object source, ElapsedEventArgs e)
    {
        RunOnUiThread(delegate
        {
      //this is my service which i was starting at every 4 seconds  
            StartService(new Intent(this, typeof(ServiceClass)));  
        });
    }
于 2014-10-14T07:04:30.370 回答
0

为什么不直接使用System.Timers.Timer

var timer = new Timer();
//What to do when the time elapses
timer.Elapsed += (sender, args) => FireTheMissiles();
//How often (5 sec)
timer.Interval = 5000;
//Start it!
timer.Enabled = true;

private void FireTheMissiles()
{
    //But I'm le tired...
}

另一种制作新的TaskorThread并让它每次休眠 5 秒的方法:

Task.Factory.StartNew(() =>
    {
        while (true)
        {
            // do some stuff
            Thread.Sleep(TimeSpan.FromSeconds(5));
        }
    });

ThreadPool.QueueUserWorkItem(thread =>
    {
        while (true)
        {
            // do some stuff
            Thread.Sleep(TimeSpan.FromSeconds(5));
        }
    });
于 2013-05-02T20:17:40.203 回答