2011-08-17 4 views
3

Je veux utiliser une minuterie dans mon programme monodroid C# pour Android 2.2, mais cela ne fonctionne pas. voici mon code: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++; 
    } 
} 
} 

s'il vous plaît aidez-moi.

+3

S'il vous plaît définir « ne fonctionne pas ». – eldarerathis

Répondre

8

System.Timers.Timer sera exécuté sur un thread distinct (non-UI). Par conséquent, votre méthode OnTimeEvent() est incorrecte, car il mettra à jour une instance d'interface utilisateur (txv1) à partir d'un thread non-interface utilisateur.

Vous devez utiliser Activity.RunOnUiThread() pour mettre à jour l'interface utilisateur à partir d'un fil de fond:

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