Exécution d'une tâche avec un timer [Résolu]

Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 18 oct. 2006 à 16:10 - Dernière réponse : Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention
- 23 oct. 2006 à 09:28
Salut,

J'ai un problème avec mon timer. Je veux qu'il scrutte un dossier toutes les 10 sec par exemple pour voir s'il y a quelque chose dedans.

J'ai un fichier .ini parametrer (pour l'interval et le chemin de mes fichiers)
Voici un exemple de ma procédure :

timer1.interval = <valeur du fichier.ini (10 000 pour suivre mon exemple>
timer1.start()

for each str in IO.Directiry.GetFiles(<chemin du .ini>, "*.*")
   traitement
next

Mon problème est que quand je place des msgbox sur la valeur du temps restant, il me retourne 10 000

Comment lui dire de le faire dès que mon timer est à 0 ?

Merci de votre aide à tous.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 23 oct. 2006 à 09:28
3
Merci
Salut,

Même avec ce que tu m'as ditr cela ne fonctionne pas mais par contre en faisant un thread, c'est passé alors je vais gardé cette solution. Merci pour tout.

Merci Le newbie 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Le newbie
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 oct. 2006 à 16:40
0
Merci
" ... sur la valeur du temps restant ..."

Comment tu arrive à l'avoir celle là, avec le controle Timer de VB, elle n'est pas accessible.

A partir du moment ou le timer est démarrer, il se déclenchera automatiquement toutes les 10 secondes tant qu'il n'est pas arreter.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 18 oct. 2006 à 16:45
0
Merci
Rebonjour,

J'ai fais :

Private time as single

dim duree as time

duree = timer1.interval
timer1.start()

for ...

   msgbox(duree)

next

Aurais-je encore fais le boulet !!!!

Merci de votre aide à tous.
Commenter la réponse de Le newbie
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 18 oct. 2006 à 16:50
0
Merci
Oui j'ai fais le boulet je confirme.

Il n'empêche que je n'arrive pas à automatiser une procédure toutes les X secondes

Merci de votre aide à tous.
Commenter la réponse de Le newbie
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 oct. 2006 à 16:53
0
Merci
interval est juste une proprieté du controle Timer (qui plus est au format integer et non pas time).

Elle indique juste au controle la période de déclenchement.
Elle ne reflete en aucun cas la durée restante avant déclenchement.
Il n'est pas possible, à ma connaissance de connaitre ce paramètre.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 oct. 2006 à 16:55
0
Merci
Dans les propriétés de ton Timer, tu met 10000 pour interval.

Ensuite tu fais un doubleclick sur ton timer, il va t'ouvrir la procedure TonTimer_Tick qui est l'évènement généré toutes les 10 secondes.
C'est dans cette procédure que tu met ton code à executer toutes les 10 secondes.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 18 oct. 2006 à 17:07
0
Merci
Ecoute pour faire au plus simple voilà ce que j'ai coder. Ca sera plus simple peut être pour toi car à l'heure actuelle, j'ai beau attendre 10 sec, 20 sec, ... Rien de plus si un fichier se rajoute dans mon répertoire Tempo.

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick


        Me.Visible = False


        Search()


    End Sub


Private Sub Search()


        ' Variables locales


        Dim strTempo As String
        Dim strExe As String
        Dim Proc As New Process


        strExe = Ini.ReadString("Executer", "Exe")


        'Pour chaque fichier présent dans le chemin du fichier .ini à la clé Tempo


        For Each strTempo In IO.Directory.GetFiles(Ini.ReadString("Temporaire", "Temp", "*.*"))


            ' Execution du fichier


            Proc.StartInfo.FileName = strTempo
            Proc.Start()


            'Copie du fichier dans le second répertoire et suppression dans le premier


            'IO.File.Move(strTempo, strExe & "" & Path.GetFileName(strTempo))
            'IO.File.Delete(strTempo)


        Next




    End Sub

Merci de votre aide à tous.
Commenter la réponse de Le newbie
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 oct. 2006 à 17:45
0
Merci
Première chose, bein que le code soit en commentaire, je suppose que ce n'est que temporaire.
A partir du moment ou tu fait un .File.Move, inutile de faire derrière un .File.Delete, le fichier source n'existe plus puisqu'il a été déplacé.

Ensuite, je ne sais pas à quoi correspond Ini.ReadString exactement, mais dans la ligne ci-dessous il n'y aurait pas un problème de paranthèses par hasard ?

-->  For Each strTempo In IO.Directory.GetFiles(Ini.ReadString("Temporaire", "Temp", "*.*"))
c'est pas plutot
--> For Each strTempo In IO.Directory.GetFiles(Ini.ReadString("Temporaire", "Temp"), "*.*")

Autre point, tu as bien mis Timer1.interval = 10000, soit dans le code, soit directement dans les propriétés du controle.
Dans le code (form_load par exemple) tu met bien Timer1.Start quelque part.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 18 oct. 2006 à 18:06
0
Merci
Merci pour le .Move

ini.redString est une des procédure d'une classe pour lire un fichier ini et qui retourne un string.
Pour le pb de parenthèse je sais pas je vais tester.

Voila tout le code de toute ma form :

Imports System.IO




'________________________________________________________________________
' Prévoir de mettre le fichier dans le répertoire de démarrage du poste
'________________________________________________________________________


' Notes :
' Pb avec le timer (actions non répétées).


Public Class frmMain


    Inherits System.Windows.Forms.Form


    Private time As Single
    Dim Ini As New INIReader("C:\SM vs Citrix.ini")




   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim proc As New Process


        AddHandler cmdStart.Click, AddressOf Timer1_Tick


        Timer1.Interval = Ini.ReadInteger("Interval", "Inter")
        Timer1.Start()


        NotifyIcon1.ContextMenu = contextMenu1
        NotifyIcon1.Visible = True
        NotifyIcon1.Text = "SM vs Citrix"
        Me.Hide()


       proc.StartInfo.FileName = "C:\SM vs Citrix.bat"
        proc.Start()


    End Sub


    Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click


        NotifyIcon1.Visible = False
        Me.Close()


    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)


        Me.Visible = False


        Search()


    End Sub


    Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick


        Me.Show()


    End Sub


    Private Sub Search()


        Dim strTempo As String
        Dim strExe As String
        Dim Proc As New Process


        strExe = Ini.ReadString("Executer", "Exe")


        For Each strTempo In IO.Directory.GetFiles(Ini.ReadString("Temporaire", "Temp"), "*.*")


            Proc.StartInfo.FileName = strTempo
            Proc.Start()


            IO.File.Move(strTempo, strExe & "" & Path.GetFileName(strTempo))


        Next




    End Sub


End Class

J'ai apporté les corrections que tu m'as suggeré et t'ai supprimer les commentaires. Bonne réception

Merci de votre aide à tous.
Commenter la réponse de Le newbie
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 oct. 2006 à 18:27
0
Merci
Oui mais là du coup il y aura un problème.
            Proc.StartInfo.FileName = strTempo
            Proc.Start()

            IO.File.Move(strTempo, strExe & "" & Path.GetFileName(strTempo))

Tu ouvre ton fichier strTempo, et tu essaye de le déplacer de suite après.
Tu ne pourras pas le déplacer tant qu'il est utilisé (ouvert)

Je pensais que tu avais les Proc.Sta.... en remplacemnt de IO.File.Move pour debugger.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Le newbie 200 Messages postés mardi 17 octobre 2006Date d'inscription 24 mars 2012 Dernière intervention - 18 oct. 2006 à 18:31
0
Merci
Alors c'est vrai qu'il fait une erreur à ce niveau et que je l'avais laissé en commentaire (que je t'ai enlevé) car si tu regarde le premier bout de code que je t'ai envoyé, il y a les '. Mais pour le timer je sais pas ???

Merci de votre aide à tous.
Commenter la réponse de Le newbie
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 oct. 2006 à 19:20
0
Merci
Bon de retour. Voyons voir ce code.

La ligne de l'évènement du timer n'est pas complete, il manque l'abonnement au Handle de l'évènement
Ce qui veut dire que le timer ne saura pas quelle procédure appeler lors du déclenchement

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
 
Tout le reste me semble correct.

Sauf qu'il manque l'icone pour la zone de notification et le problème du Proc.Start/IO.File.Move.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.