IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

demarrer un timer depuis un thread


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut demarrer un timer depuis un thread
    Bonjour, je souhaite démarrer un timer depuis un thread mais cela ne fonctionne pas, je pense qu'il s'agit du même problème que lorsque l'on essaye de modifier un élément de la fenêtre depuis un thread ?
    Mais comment puis je faire ? mettre un sleep ? mais cela figera mon application

    voici mon code simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    'au demarrage de l'application
    _threadMail = New Thread(New ThreadStart(AddressOf reception))
    _threadMail.Name = "Thread1"
    _threadMail.Start()
     
    Public sub reception()
    'plein de traitement avant puis ce qui nous intéresse 
    traitement_data()
    End sub
     
    'c'est dans traitement_data() que je lance mon timer qui ne s'execute jamais :
    Public sub traitement_data()
    'plein de traitement puis on lance le tr
    'on demarre le tr_print pour aprés 16 secondes lancer l'impression avec la carte si elle a eu le tps de venir
                Tr_print.Interval = 16000
                Tr_print.Start()
    End Sub
     
    'et enfin le timer qui ne s'éxecute pas 
     Private Sub Tr_print_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tr_print.Tick
            'on parcours aprés 12 secondes le dossier pour voir la carte avec le numero dop en png est présente ou pas
            Try
                If System.IO.File.Exists(dossier_fax + "\" + numero_op.ToString + ".png") Then
                    impression_ticket() 'si on a trouve le fichier on imprime
                    les_try("tr_print_tick() on imprime on a la carte")
                    Tr_print.Stop()
                    Exit Sub
                Else
                    impression_ticket()
                    les_try("tr_print_tick() à detecté que le fichier " + numero_op.ToString + ".png est absent")
                    Tr_print.Stop()
                    Exit Sub
                End If
            Catch ex As Exception
                les_try("tr_print_tick() " & ex.ToString)
            End Try
        End Sub

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    un timer sert surtout à faire quelque chose tout les tant de temps
    si c'est pour du one shot de temps en temps tu peux t'en sortir sans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim th as new system.threading.thread(sub()
                               system.threading.thread.sleep(16000)
                               me.invoke(sub_refresh_interface)
                            end sub)
    th.Start
    sinon tu peux laisser le timer en route tout le temps et utiliser un flag ou un flag délayeur (le nom c'est de moi ^^)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub timer.tick
      if flag > 0 then 
         flag -= 1
         exit sub
      end if
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    merci pol63, mais l’inconvénient avec system.threading.thread.sleep(16000) est qu'il me fige l'application pendant 16 secondes !

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    non
    sleep fige le thread sur lequel il est exécuté et dans mon exemple ce n'est pas sur le thread principal mais sur un nouveau thread d'attente
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. terminer le programme depuis un thread
    Par Tymk dans le forum Threads & Processus
    Réponses: 6
    Dernier message: 04/02/2007, 17h05
  2. Réponses: 2
    Dernier message: 19/12/2006, 22h55
  3. Réponses: 26
    Dernier message: 13/12/2006, 07h35
  4. [C#] Instancier un objet Form depuis un Thread
    Par Philipili dans le forum Windows Forms
    Réponses: 10
    Dernier message: 13/05/2006, 13h40
  5. Réponses: 1
    Dernier message: 25/03/2006, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo