2010-07-28 6 views
0

J'ai une minuterie singleton dans mon application WP7 mais je n'ai aucune idée de comment l'obtenir pour mettre à jour un bloc de texte chaque fois que le minuteur se déclenche ... Y at-il un moyen d'obtenir le gestionnaire d'événements du minuteur puis mettre à jour la zone de texte avec l'heure exacte?C# WP7 singleton timer

Voici ce que j'ai essayé d'utiliser, mais ne fonctionnerait pas:

public _1() 
    { 
     InitializeComponent(); 
     Singleton.TimerSingleton.Timer.Tick += new EventHandler(SingleTimer_Tick); 
    } 

    void SingleTimer_Tick(object sender) 
    { 
     textBlock1.Text = Singleton.TimerSingleton.TimeElapsed.TotalSeconds.ToString(); 
    } 

Voici mon Timer.cs singleton:

http://tech-fyi.net/code/timer.cs.txt

+0

Que se passe-t-il exactement quand vous dites "ça ne marche pas"? Avez-vous une erreur? Est-ce que 'SingleTime_Tick' n'est pas appelé? Plus de détails vous aideront à obtenir une réponse. – LBushkin

+0

L'application ne me laissera pas appeler SingleTime_Tick. L'application dit qu'il n'y a pas de surcharge. – Ryanb58

Répondre

4
void SingleTimer_Tick(object sender) 

La méthode ci-dessus doit être quelque chose comme

void SingleTimer_Tick(object sender, EventArgs e) 

Et quand vous posez une question s'il vous plaît obtenir votre droit de terminologie et de donner plus de détails. Cela vous aidera à obtenir la bonne réponse plus rapidement. Par exemple quand vous dites "l'application ne me laissera pas appeler ..." ce que vous voulez dire en réalité, c'est que le compilateur vous donne une erreur.

+0

+1 - et l'événement Tick de DispatcherTimer est déclenché sur le fil 'GUI', donc il ne devrait pas y avoir de problèmes. –

+0

@Alex Humphrey- C'est vrai, j'ai oublié d'inclure cela dans la description. – hawk

3

La méthode SingleTimer_Tick est exécuté sur une interface graphique non fil. Appelez

textBlock1.Invoke (() => textBlock1.Text = Singleton.TimerSingleton.TimeElapsed.TotalSeconds.ToString());

+0

Il me donne l'erreur qu'il n'y a pas de diff pour Invoke: /? – Ryanb58

+0

La question que vous avez posée était incomplète. Regarde mon autre réponse. – hawk

0

Je ne sais pas quel type votre minuteur est. Certains sont utilisés pour déclencher des événements sur un thread de pool de threads, d'autres sur le thread graphique. Si vous pouviez nous dire le type de votre minuterie (System.Timers.Timer, System.Threading.Timer etc.) alors je peux vous dire à quoi il sert. Cependant, si je me souviens bien, Tick est utilisé pour la minuterie GUI alors qu'Elapsed est utilisé pour d'autres minuteurs - je peux me tromper. Au risque de vous fréquenter, je vais vous demander si vous avez démarré votre minuterie ou non :) Habituellement, un appel à Start() ou le réglage de Enabled à true lancera un objet timer. Si vous pensez que la minuterie est déjà en cours d'exécution, vous devriez être en mesure de vérifier une propriété telle que Activé pour affirmer qu'elle est en cours d'exécution avant de connecter l'événement. En dehors de cela, je ferais un débogage de style printf pour vérifier que l'événement est réellement levé.

+0

Posté au-dessus ci-dessus :) – Ryanb58

+0

Et oui je ne démarre le minuteur :) – Ryanb58