Exécution d'une tâche avec un timer

Résolu
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 - 18 oct. 2006 à 16:10
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 - 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.
A voir également:

12 réponses

Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
23 oct. 2006 à 09:28
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.
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 oct. 2006 à 16:40
" ... 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 #
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 oct. 2006 à 16:45
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.
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 oct. 2006 à 16:50
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 oct. 2006 à 16:53
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 #
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 oct. 2006 à 16:55
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 #
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 oct. 2006 à 17:07
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 oct. 2006 à 17:45
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 #
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 oct. 2006 à 18:06
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 oct. 2006 à 18:27
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 #
0
Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 2
18 oct. 2006 à 18:31
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 oct. 2006 à 19:20
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 #
0
Rejoignez-nous