none
Accéder à une variable en cours d'exécution

    Discussion générale

  • Bonjour, 

    J'ai un bouton qui lance une fonction au cours de laquelle une variable est incrémentée. J'aimerais pouvoir récupérer cette valeur ailleurs en cours d'exécution. J'ai essayé de passer la valeur en référence et de la récupérer dans un timer mais en vain !

    Auriez-vous un exemple pour faire ceci ? 
    Merci d'avance :)

    lundi 8 août 2016 12:20

Toutes les réponses

  • Bonjour Dorian.thms,

    Comment procédez-vous actuellement ?

    Cordialement,

    lundi 8 août 2016 12:26
  • Ma variable est passée en référence dans les arguments de ma première méthode. Au cours de cette méthode la variable est incrémentée plusieurs fois. 

    J'ai monTimer.enabled=true au début de la méthode et =false à la fin. 

    Dans le timer_tick je récupère la variable et met sa valeur dans un label. 

    Mais j'ai bien l'impression que le timer ne se déclenche pas, que la méthode se fait d'une traite sans laisser le timer se jouer en parallèle. 

    J'ai aussi essayé sans timer en écrivant la valeur de la variable dans le label directement après chaque incrément dans la méthode. Mais sans succès. 

    Bref, je ne sais pas trop ce que je suis en train de faire...

    lundi 8 août 2016 12:32
  • Le timer ne se joue pas en parallèle, il est sur le thread UI. En fait, le code passe trop rapidement de Enable = true à Enable = false, ne laissant peut être pas suffisamment de temps à l'événement Tick de se déclencher. Par exemple :

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Variable = 0
    
            DoCalcul()
        End Sub
    
        Private Variable As Integer
    
        Private Sub IncrementVariable(ByRef v As Integer)
            v = v + 1
        End Sub
    
        Private Sub DoCalcul()
            Timer1.Enabled = True
    
            IncrementVariable(Variable)
    
            Timer1.Enabled = False
        End Sub
    
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Label1.Text = Variable.ToString()
        End Sub

    Ne passera jamais dans l'événement Tick, tandis que si je commente la ligne

    Timer1.Enable = False

    Le Timer aura le temps de lever l'événement Tick dans l'intervalle définie.

    PS : le code est en VB.NET, je le sais mais j'avais déjà un projets en VB.NET ouvert sous la main, cependant, c'est la même chose en C#.

    Cordialement,

    lundi 8 août 2016 12:49
  • Mais là je n'ai accès à la Variable qu'à la fin de DoCalcul() ? J'aimerais y avoir accès en permanence pour faire une barre de progression.
    lundi 8 août 2016 13:17