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 :

Application qui se fige pendant quelques secondes même avec les Thread.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut Application qui se fige pendant quelques secondes même avec les Thread.
    Bonjour le Forum,

    Mon application se fige pendant quelques secondes lorsque les Thread s'activent, j'ai essayé avec Invoke sans succès.
    Savez vous ce que je dois modifier ou ajouter afin que l'appli ne se bloque plus ?

    Voici mon code.


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Imports System.Threading
    Imports System.Threading.Tasks
     
    Public Class form2
    Dim Thread As System.Threading.Thread
        Dim Thread2 As System.Threading.Thread
     
       Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Thread = New System.Threading.Thread(AddressOf Fichier_Exist)
            Thread2 = New System.Threading.Thread(AddressOf CISCO)
            Thread.Start()
            Thread2.Start()
            CheckForIllegalCrossThreadCalls = False
     
        End Sub
     
     Private Sub Fichier_Exist()
     
            Try
     
                Dim path As String = ("\\Monchemin.xlsm")
                If IO.File.Exists(path) Then
                    PictureBox3.Image = My.Resources.Vert
                    Label5.Visible = True
                    Label6.Visible = False
     
                Else
                    Label6.Visible = True
                    Label5.Visible = False
                    PictureBox3.Image = My.Resources.Rouge
                              End If
              '  Invoke(New MethodInvoker(Sub() IO.File.Exists(path)))
                '  Invoke(New MethodInvoker(Sub() Timer5.Start()))
                Invoke(New MethodInvoker(Sub() PictureBox3.Show()))
            Catch ex As Exception
     
            End Try
        End Sub
     
     Private Sub CISCO()
            Try
                ListBox1.Items.Clear()
                Dim nics = NetworkInterface.GetAllNetworkInterfaces().Where(Function(o) o.OperationalStatus = OperationalStatus.Up)
     
                For Each item In nics
                    ListBox1.Items.Add(item.Description)
                                Next item
     
                Dim x As Integer = -1
                x = ListBox1.FindString(TextBox1.Text)
                If x > -1 Then
                                  Label20.Text = "Cisco ON"
                Else
                    Button5.BackgroundImage = My.Resources.carre_gris_menu
     
                    Label20.Text = "Cisco OFF"
                End If
                'Invoke(New MethodInvoker(Sub() Timer6.Start()))
                Invoke(New MethodInvoker(Sub() ListBox1.Show()))
            Catch ex As Exception
     
            End Try
        End Sub
     
      Private Sub Timer6_Tick(sender As Object, e As EventArgs) Handles Timer6.Tick
            CISCO()
        End Sub
     
      Private Sub Timer5_Tick(sender As Object, e As EventArgs) Handles Timer5.Tick
            Fichier_Exist()
     
        End Sub
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 996
    Par défaut
    Les appels dans tes Timer_Tick ne sont pas lancé dans des Threads.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    Bonjour le Forum,

    Merci popo pour l'info avec le Timer.

    Je me dirige donc vers une boucle, mais cela ne fonctionne qu'au démarrage de l'application, je m'explique.

    Je passe par un VPN pour accéder à un serveur pro " télétravail", mon appli test si le fichier existe, mais si je déconnecte le VPN ou si je perd la connexion , la boucle ne fonctionne plus, alors qu'avec un Timer la connexion est testée toutes les 2000ms "par exemple". Donc, est-il possible en passant par une boucle et un Thread de savoir quant le fichier est accessible et quand il ne l'est pas ? "en temps réel sans être obligé de relancer l'appli".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      Dim path As String = ("\\Monchemin-.xlsm")
            Try
     
                While Not IO.File.Exists(path)
                    Label6.Visible = True
                    Label5.Visible = False
                    PictureBox3.Image = My.Resources.Rouge
                    While IO.File.Exists(path)
                        PictureBox3.Image = My.Resources.Vert
                        Label5.Visible = True
                        Label6.Visible = False
                    End While
                End While
    Merci pour votre aide.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 996
    Par défaut
    Tu peux lancer le traitement d'un timer dans un Thred comme tu le fais au démarrage. Et si tu ne veux pas que le traitement soit relancé tant que le précédent n'est pas terminé, il suffit de désactiver le timer et le réactiver en fin de traitement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Juillet 2020
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Juillet 2020
    Messages : 141
    Par défaut
    Bonjour,

    J'ai suivi vos conseils en arrêtent le Timer puis en le redémarrant mais malgré tout l'appli fige quelques secondes, voici pour info, le code.
    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
     
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Timer5.Enabled = True
            Timer5.Start()
    ......
     
    Private Sub Fichier_Exist()       
            Timer5.Stop()
            Timer5.Enabled = False
            '    System.Threading.Thread.Sleep(2000) 'une pause de 2000ms
            Dim path As String = ("\\Monchemin-.xlsm")
            Try
     
                If IO.File.Exists(path) Then
                    PictureBox3.Image = My.Resources.Vert
                    Label5.Visible = True
                    Label6.Visible = False
                    'Exit Sub
                ElseIf Not IO.File.Exists(path) Then
                    Label6.Visible = True
                    Label5.Visible = False
                    PictureBox3.Image = My.Resources.Rouge
                    'IO.File.Create(Application.StartupPath & "\SETUPTL.txt")
                End If
                          Invoke(New MethodInvoker(Sub() PictureBox3.Show()))
     
            Catch ex As Exception
     
            End Try
            Timer5.Enabled = True
            Timer5.Start()
        End Sub
     
    Private Sub Timer5_Tick(sender As Object, e As EventArgs) Handles Timer5.Tick
     
        Fichier_Exist()
     
    End Sub
    J'ai aussi essayé de lancer le Thread à partir du Timer "mauvaise idée, l'application plante car le Thread est lancé plusieurs fois, même avec Thread.Abort()".

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 996
    Par défaut
    Citation Envoyé par Tempus01 Voir le message
    J'ai aussi essayé de lancer le Thread à partir du Timer "mauvaise idée, l'application plante car le Thread est lancé plusieurs fois, même avec Thread.Abort()".
    C'est pourtant bien ce qu'il faut faire .
    Dans la procédure du timer :
    1.lancer ton traitement dans un Thread.
    2. Suspendre le timer.

    A la fin du traitement, réactiver le timer.

Discussions similaires

  1. Inhiber click souris pendant quelques secondes
    Par eag35 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/04/2009, 16h19
  2. Thread qui se termine aprés quelque secondes ?
    Par jackm dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 21/03/2008, 09h31
  3. [SQL] Bloquer l'enregistrement dans une table pendant quelques secondes
    Par syl2042 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/09/2007, 10h19
  4. message affiché pendant quelques secondes
    Par kalou26 dans le forum C++Builder
    Réponses: 48
    Dernier message: 16/06/2006, 11h36
  5. Affichage de bmp pendant quelque seconde
    Par Invité dans le forum SDL
    Réponses: 3
    Dernier message: 04/05/2006, 23h08

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