monodroid Timer

本文关键字:Timer monodroid | 更新日期: 2023-09-27 18:05:59

我想在我的c# monodroid程序android 2.2中使用定时器,但它不起作用。下面是我的代码:

using System;
using System.Timers;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Util;
namespace MonoAndroidApplication1
{
[Activity(Label = "MonoAndroidApplication1", MainLauncher = true, Icon=drawable/icon")]
public class Activity1 : Activity
{
    int count = 1;
    TextView txv1;
    System.Timers.Timer t1;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
        txv1 = FindViewById<TextView>(Resource.Id.txv1);
        DateTime dt = DateTime.Now;
        txv1.Text = dt.ToShortTimeString();
        t1 = new System.Timers.Timer(200);
        t1.Elapsed += new ElapsedEventHandler(OnTimeEvent);
        t1.Interval = 200;
        t1.Enabled = true;
        t1.Start();

    }
    private void OnTimeEvent(object source, ElapsedEventArgs e)
    {
        txv1.Text = count.ToString();
        count++;
    }
}
}

monodroid Timer

System.Timers.Timer将运行在一个单独的(非ui)线程上。因此,你的OnTimeEvent()方法是不正确的,因为它将从一个非UI线程更新一个UI实例(txv1)。

你需要使用Activity.RunOnUiThread()从后台线程更新UI:

private void OnTimeEvent(object source, ElapsedEventArgs e)
{
    RunOnUiThread(delegate {
        txv1.Text = count.ToString ();
        count++;
    });
}