Gaedarr
Messages postés49Date d'inscriptionlundi 4 février 2013StatutMembreDernière intervention12 mars 2015
-
14 mai 2013 à 09:05
Gaedarr
Messages postés49Date d'inscriptionlundi 4 février 2013StatutMembreDernière intervention12 mars 2015
-
16 mai 2013 à 08:39
Bonjour,
Tout est dans le titre. Je recherche à utiliser le Thread.Sleep(); dans mon BGW mais le hic est qu'il m'indique toujours le message suivant :
L'exception InvalidOperationException n'a pas été gérée.
BackgroundWorker est actuellement occupé et ne peut pas exécuter plusieurs tâches simultanément.
Pour vous donner une piste, voici quelques bouts de mon code.
Le timer qui appelle le BGW :
private void tmrVentilation_Tick(object sender, EventArgs e)
{
#region Récupération de l'heure système
iHeures = DateTime.Now.Hour;
iMinutes = DateTime.Now.Minute;
iSystemeTotal = iHeures * 3600 + iMinutes * 60;
#endregion
if (bHeure == false)
{
// Appelle le BackGroundWorker toutes les 3 minutes
iHeuresPWM = iSystemeTotal + 180;
bHeure = true;
}
else if (bHeure == true)
{
if (iSystemeTotal == iHeuresPWM)
{
// Appel de notre BackGroundWorker
bgwPWM.RunWorkerAsync();
}
}
}
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 15 mai 2013 à 15:24
Salut,
Ton problème ne vient pas du Thread.Sleep(), mais d'un deuxième tick de tmrVentilation, qui va appeler RunWorkerAsync sur bgwPWM alors qu'il est déjà en cours (et évidemment, si tu enlèves les Thread.Sleep(), la méthode DoWork a le temps de se finir avant le tick suivant.
Donc deux solutions (selon le but précis de ton application) :
Soit tu arrêtes ton timer au début de tmrVentilation_tick (et je pense que c'est plutôt ça qui t'intéresse), soit tu crées un nouveau BackgroundWorker à chaque tick.
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201625 14 mai 2013 à 21:24
Salut,
Y'a certainement mieux a faire (cycle du processeur, compteur de perf ect...) mais simplement,
tu peux toujours simuler une fonction qui tourne dans le vide le nombre de millisecondes donnée :
Exemple :
Gaedarr
Messages postés49Date d'inscriptionlundi 4 février 2013StatutMembreDernière intervention12 mars 2015 16 mai 2013 à 08:39
Bonjour à vous,
Tout d'abord, merci d'avoir pris un peu de temps pour me répondre :)
C'est effectivement bien un second appel du BGW qui se fait alors que le thread est déjà créé.
J'ai pu modifier un peu le code pour éviter que le BGW ne soit appelé plus d'une fois tant qu'il n'a pas terminé sa tâche. La variable booléenne était là pour ça justement, mais je l'avais mal implémentée.