Bonjour, j’ai abordé un problème lié à la minuterie. J'espère que quelqu'un pourra vous aider.
Thread thread1 = new Thread(new ParameterizedThreadStart( execute2));
thread1.Start(externalFileParams);
.
public void execute2(Object ob)
{
if (ob is ExternalFileParams)
{
if (boolean_variable== true)
executeMyMethod();//this also executes very well if condition is true
else
{
timer1.enabled = true;
timer1.start();
}
}
}
}
5 mais l'événement tick de la minuterie n'est pas déclenché
Je travaille sur le framework VS2008 3.5. J'ai fait glisser le chronomètre de la boîte à outils et défini sa Interval
sur 300 et tenté de définir la méthode Enabled
true/false Est timer1_Tick(Object sender , EventArgs e)
mais il ne s'est pas déclenché.
quelqu'un peut-il suggérer ce que je fais mal?
Vous pouvez essayer de démarrer le chronomètre de la façon suivante:
Ajouter dans le constructeur de formulaire ceci:
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 1 second.
aTimer.Interval = 1000;
Ajoutez cette méthode à Form1:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//do something with the timer
}
Sur le bouton clic événement ajoutez ceci:
aTimer.Enabled = true;
Cette minuterie est déjà en place, donc pas besoin de démarrer une nouvelle discussion.
C'est vrai ce que dit Matias Fidemraizer. Mais, il y a un travail autour ...
Lorsque vous avez un contrôle sur votre formulaire qui est invocable (par exemple, une barre de statut), appelez-le!
Exemple de code C #:
private void Form1_Load(object sender, EventArgs e)
{
Thread sampleThread = new Thread(delegate()
{
// Invoke your control like this
this.statusStrip1.Invoke(new MethodInvoker(delegate()
{
timer1.Start();
}));
});
sampleThread.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show("I just ticked!");
}
System.Windows.Forms.Timer fonctionne dans une application à un seul thread.
Vérifiez ce lien:
Remarques dit:
Un minuteur est utilisé pour déclencher un événement à Intervalles définis par l'utilisateur. Ce temporisateur Windows Est conçu pour un environnement À un seul thread, dans lequel les threads UI Sont utilisés pour effectuer le traitement de . Il faut que le code de l'utilisateur Dispose d'une pompe de messagerie de l'interface utilisateur disponible Et qu'il fonctionne toujours à partir du même fil Ou que l'appel soit acheminé sur un autre thread .
Lisez-en plus à la section "Remarques" et vous découvrirez que Microsoft vous recommande d'utiliser cette minuterie pour la synchroniser avec le fil de l'interface utilisateur.
Je voudrais utiliser un BackgroundWorker (au lieu d'un raw thread). Le fil principal s'abonnerait à l'événement de RunWorkerCompleted du travailleur : l'événement se déclenche dans votre fil principal à la fin du fil. Utilisez ce gestionnaire d'événements pour redémarrer votre minuterie.