Comment activer une minuterie à partir d'un autre thread/classe
Original post: Comment accéder à un timer d'une autre classe en C#
J'ai tout essayé.
-Événement
-L'appel ne peut pas être fait,parce que les Minuteries n'ont pas InvokeRequired propriété.
-Public/propriété interne
Rien n'a fonctionné,le code est exécuté,la minuterie.Propriété Enabled est à "true" ,mais il n'a pas de Tiques.Si j'appelle l'événement ou tout simplement de changer la propriété de la classe de formulaire dans une NON-méthode statique, il ne les tiques et les œuvres.
Je n'ai jamais su qu'il me faudrait une journée et probablement plus pour acquérir comment utiliser un décent minuterie.
Si il n'y a aucun moyen de le faire,est-il autre chose que je peux l'utiliser que des œuvres similaires pour les timer(délai,activer/désactiver)?
double possible de stackoverflow.com/questions/725413/...
OriginalL'auteur Ivan Prodanov | 2009-04-07
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser la classe Timer à partir du Système.Minuteries d'espace de noms, et pas les WinForms contrôle Timer, si vous voulez le support du multi-thread. Consulter la documentation MSDN pour les WinForms contrôle Timer pour plus d'informations:
http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx
Été surpris d'être le premier sur ce coup...
Bien que cette obtiendrez de l'événement Écoulé à feu (le Système.Minuterie.Compte à rebours est Écoulé événement, par opposition au Système.De Windows.Les formulaires.Timer Tick cas), il sera tir dans le contexte du thread appelant et, en fonction de ce que vous faites dans l'événement, pourrait aboutir à un Système.InvalidOperationException comme "inter-threads non valide: le Contrôle de "X", accessible à partir d'un thread autre que le thread qu'il a été créé."
Génie, je l'avais perdu de la journée. Ne savais pas que le caprice de windows forms à rebours.
OriginalL'auteur David M
Vous n'avez pas besoin de vérifier
InvokeRequired
sur le Contrôle iteself, vous pouvez vérifier la propriété de la classe par exemple:OriginalL'auteur Seibar
J'ai accidentellement essayé d'utiliser invoquer à nouveau,cette fois,il a travaillé, mais je vais accepter votre réponse,DavidM.
this
. Je pense qu'une approche évolutive est par @David Mmerci de demander, honte sur moi pour regarder après une journée de...
OriginalL'auteur Ivan Prodanov
Juste parce que
System.Windows.Forms.Timer
n'a pas la capacité d'invoquer, ne signifie pas que votre formulaire n'a pas. Essayez monInvokeEx
à partir de la deuxième (ou autre) de fil pour activer le minuteur.Avec cela, le code suivant a fonctionné pour moi:
Et la minuterie instantanément ressorts à la vie après la 1 seconde.
OriginalL'auteur Samuel