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

Signaler
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
-
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
-
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.

12 réponses

Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
" ... 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 #
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
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.
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #
Messages postés
200
Date d'inscription
mardi 17 octobre 2006
Statut
Membre
Dernière intervention
24 mars 2012
2
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.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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 #