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 :

[WPF] Interval dispatchertimer.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut [WPF] Interval dispatchertimer.
    Bonjour à tous,

    J'aurai besoin d'une petite confirmation, car j'ai un souci que je ne m'explique pas vu ce que j'ai vu sur les forum et aide en ligne.

    J'ai plusieurs dispatcherTimer dans mon application, mais j'en ai un qui évolue avec le temps, je lui change l'intervalle. C'est le timer de timeout pour ma communication, en fonction du délai de réponse plus ou moins long suivant ce que je demande le time-out évolue.

    Il me semble pourtant que j'avais déjà testé cela, mais actuellement lorsque je change l'intervalle par juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TimerProtocolMgr.Interval = New TimeSpan(0, 0, 0, 0, ms)
    Mon TimerProtocolMgr ne fonctionne plus. L’événement associé n'est plus appelé.

    Bien entendu si je relance la totalité de la déclaration, cela fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Public Sub restartTimerProtocolMgr(ByVal ms As Integer)
            TimerProtocolMgr = New DispatcherTimer
            AddHandler TimerProtocolMgr.Tick, AddressOf TimerProtocolMgr_Tick
            TimerProtocolMgr.Interval = New TimeSpan(0, 0, 0, 0, ms)
            TimerProtocolMgr.Start()
        End Sub
    Mais d’après ce que j'avais trouvé, c'etait inutile.
    Il arrive parfois que ma réponse est parfois longue (quand j’interroge mon système pour récupérer la configuration complète) donc un délais de time-out en ms dépassant les 1000 , est-ce que c'est sa qui lui conviens pas ?

    Merci de votre aide, pour le moment je passe par ma méthode restartTimerProtocolMgr et plus de souci, mais c'est surprenant.

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Je ne suis pas sûr de bien comprendre ton problème mais 2 détails m'interpellent :

    1. Pourquoi TimerProtocolMgr.Interval = New TimeSpan(0, 0, 0, 0, ms) et non TimerProtocolMgr.Interval = UnNombreEntierDeMilliSecondes (pourquoi TimeSpan) ?
    2. Tu écris TimerProtocolMgr = New DispatcherTimer. Ceci implique en principe l'existence d'un Dispose correspondant, non ?


    Pour info, la valeur de Interval peut être une valeur de 1 et 2147483647 msec.

    J'espère que ceci t'aidera ...

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour
    Comme dit par Phil Rob ton code est un peu pipé ,voire biscornu puisque il existe une version toute faite pour les millisecondes et même avec des graduations "ticks" .
    De plus il ne faut jamais oublier que le DispatcherTimer ne peut être plus "véloce" que le "Render Thread" de l'UI dont il dépend.
    exemple de code ou l'on change l'intervalle (plus grand ou plus petit à tester) :
    1/ xaml
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <StackPanel >
            <Label 
                x:Name="lblTime" 
                HorizontalAlignment="Center" VerticalAlignment="Center"
                FontFamily="Arial" FontSize="14"
                Foreground="Red"/>
     
            <Button x:Name="btnNewInterval" Content="New Interval" Click="btnNewInterval_Click"/>
        </StackPanel>
    </Window>

    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
    Imports System.Windows.Threading
     
    Public Class Window1
     
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Dim dispTimer As New DispatcherTimer()
     
            dispTimer.Interval = TimeSpan.FromMilliseconds(1)
            AddHandler dispTimer.Tick, AddressOf timerTick
            dispTimer.Start()
        End Sub
     
        Private Sub timerTick(sender As Object, e As EventArgs)
            Me.lblTime.Content = DateTime.Now.ToString("HH:mm:ss.fff")
        End Sub
      Private Sub btnNewInterval_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
            If dispTimer Is Nothing Then Return
            'dispTimer.Interval = TimeSpan.FromSeconds(2) 
            dispTimer.Interval = TimeSpan.FromMilliseconds(0.5)
     
        End Sub
    bon code.

  4. #4
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour,

    Un grossss merci à vous,

    Concernant le déclaration de l’intervalle je me suis basé sur ce que j'ai trouvé ainsi que la Doc Microsoft
    Merci pour l'information. J'avoue que je n'ai pas chercher vraiment plus loin à ce niveau vu qu'avec timespan il y a la surcharge avec les ms.

    Je vais tester tout cela, merci encore. Ce qui me surprend c'est que je suis persuadé qu'en changeant uniquement "Interval" cela fonctionnait et là, je ne sais pas pourquoi, l’événement tick n’était plus activé après ce changement.


    [EDIT]
    Cela fonctionne parfaitement. Par contre c'est clair que cela n'est pas juste à 100%, en mettant un intervalle de 1000 les secondes bougent toutes les secondes, pas de souci, mais les milliseconde ne sont pas stable. Mais c'est parfait pour ce que j'en fait puisque l'erreur est toujours positive, genre le déclenchement est entre 1010 à plus de 1200 ms.

Discussions similaires

  1. SUBDATE et INTERVAL en combinant 2 critières de durée.
    Par __fabrice dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/03/2005, 10h46
  2. [DB2]Requête regroupement par intervals
    Par sm dans le forum DB2
    Réponses: 8
    Dernier message: 01/09/2004, 17h19
  3. informations sur le type interval dans interbase
    Par devalender dans le forum InterBase
    Réponses: 6
    Dernier message: 03/06/2004, 10h29
  4. [VB6] timer plus rapide que 1 d'interval
    Par windob dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 24/02/2004, 00h16
  5. Equivalent d'INTERVAL de Mysql
    Par Yann21 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/12/2003, 14h04

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