2011-08-17 53 views
3

我想在我的C#monodroid程序中使用一个计时器为android 2.2,但它不工作。 这里是我的代码:monodroid Timer

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++; 
    } 
} 
} 

请帮助我。

+3

请界定“不工作”。 – eldarerathis

回答

8

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