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 :

Mon application se fige lors d'une grosse procédure


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 Mon application se fige lors d'une grosse procédure
    Bonjour,

    je me permet de poster mon sujet sur ce forum car je ne trouve pas de solutions, voila j'ai une procédure 'envoi_general_sms' qui prend en paramètre un string 'msgs' contenant le message à envoyer.
    Cette procédure est chargé d'envoyer un message à tout les numéros de téléphone contenu dans la list 'identite_phone_general', la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'on envoi a tout le personnel un sms utiliser avec appel.vb pour envoyer un msg a tout le monde
        Public Sub envoi_general_sms(ByVal msgs As String)
            telephone_loaded() 'on remplis d'abord la list
            If identite_phone_general.Count = 0 Then 'si elle est vide on quitte la porcédure
                Exit Sub
            Else
                Dim i As Integer
                For i = 0 To identite_phone_general.Count - 1
                    envoi_sms(identite_phone_general(i), msgs.ToString)
                    Thread.Sleep(2000)
                Next
            End If
        End Sub
    la procédure 'envoi_sms' est chargé d'envoyer sur un port série la trame à un modem GSM afin d'envoyer un sms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        Public Sub envoi_sms(ByVal numero As String, ByVal message As String)
            If Test_RS232.SP_GSM.IsOpen = False Then
                log("Impossible d envoyer un sms le port COM est ferme")
                Exit Sub
            Else
                Dim carac As Char = ChrW(26) 'caractére de fin pour confirmer l'envoi
                Dim car_fin As String = ""
                Test_RS232.SP_GSM.WriteLine("AT+CMGS=" & numero & car_fin)
                Test_RS232.SP_GSM.WriteLine(message + System.Environment.NewLine + carac)
            End If
    Mon soucis est que pour un seul envoi de sms, ca fonctionne bien l'application ne se fige pas, mais lorsque je dois envoyer plusieurs SMS à l'aide de la procédure 'envoi_general_sms' l'application est bloqué jusqu’à ce que tout les sms soit envoyé a la list 'identite_phone_general'. en effet je dois attendre 2 secondes entre chaque envoi le temps que le modem envoi la trame.
    Ainsi comment puis je faire pour éviter le blocage de l'application durant l'envoi de tout les SMS ?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    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 j'avais aussi pensé a un thread mais la question que je me pose est ou le placer ???

    si je le met dans la procédure : Public Sub envoi_sms(ByVal numero As String, ByVal message As String) j'aurais un passage de plusieurs paramètres à faire !!
    et si je la met dans la procédure : Public Sub envoi_general_sms(ByVal msgs As String) il faudra aussi que je passe un paramètre !

    En fait c'est le la pause de 2 secondes : Thread.Sleep(2000) qui fige mon applications mais qui est necessais entre chaque envoi de trame vers le modem GSM, car il n'y a pas de buffer dans le modem, ainsi si je fait plusieurs envoi_sms(ByVal numero As String, ByVal message As String) les un a la suite des autres sans pause, seul le premier message sera traité !

    Donc ma question est peu être bête mais puis je placer un thread sur Thread.Sleep(2000) pour ne pas figer l'interface ??? ou dans le cas contraire ou le placer ?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub envoi_general_sms_start(ByVal msgs As String)
      dim th as new system.threading.thread(addressof envoi_general_sms)
      th.Start(msgs)
    end sub
    la signature de envoi_general_sms doit peut être être modifiée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    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
    Ok polo63 j'ai donc suivi ce qui tu ma dit ainsi voila mon code modifier :

    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
    Module GSM
     
        Public thread_group As New Thread(New ParameterizedThreadStart(AddressOf envoi_general_sms))
     
       'je passe le message en objet car c'est un thread
       Public Sub envoi_general_sms(ByVal msgs As Object)
            telephone_loaded() 'on remplis d'abord la list
            If identite_phone_general.Count = 0 Then 'si elle est vide on quitte la porcédure
                Exit Sub
            Else
                Dim i As Integer
                For i = 0 To identite_phone_general.Count - 1
                    envoi_sms(identite_phone_general(i), msgs.ToString)
                    Thread.Sleep(2000)
                Next
            End If
        End Sub
     
    End Module
    et ensuite j'appel mon thread a partir de ma form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If CheckBox_tout_personnel.Checked = True Then
                GSM.thread_group.Start(TextBox2.Text.ToString)
            Else
                'on envoi à la personne selectionner dans la combobox
                envoi_sms(ComboBox1.SelectedValue, TextBox2.Text)
                Me.Close()
                MsgBox("Message envoyé !")
            End If
        End Sub
    J'ai testé ce code mais rien ne se passe !! je ne reçoit rien sur le port COM aurais je oublié quelques choses ???
    j'ai mis des breakpoint et on passe bien dans la procédure envoi_general_sms avec le message passé en paramètre !

  6. #6
    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
    En faite je viens de remarquer que ma procédure envoi_sms lève une exception qui écrit dans un fichier texte, voici la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Public Sub envoi_sms(ByVal numero As String, ByVal message As String)
            If Test_RS232.SP_GSM.IsOpen = False Then
                log("Impossible d envoyer un sms le port COM est ferme")
                Exit Sub
            Else
                Dim carac As Char = ChrW(26) 'caractére de fin pour confirmer l'envoi
                Dim car_fin As String = ""
                Test_RS232.SP_GSM.WriteLine("AT+CMGS=" & numero & car_fin)
                Test_RS232.SP_GSM.WriteLine(message + System.Environment.NewLine + carac)
            End If
     
        End Sub
    et donc l'exception levé dans mon fichier texte est la suivante :
    29/09/2014=19:57:46=Impossible d envoyer un sms le port COM est ferme

    pourtant j'ai ouvert le port COM à l’ouverture de l'application ! dois je aussi l'ouvrir au début du thread ?

Discussions similaires

  1. MySQL indisponible lors d'une grosse requête
    Par Guireg dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/07/2009, 10h51
  2. [Applet] Mon image s'efface lors qu'une fenêtre passe au dessus
    Par chouaiebnabil dans le forum Graphisme
    Réponses: 9
    Dernier message: 28/05/2009, 16h13
  3. Message d'erreur lors d'une grosse requete
    Par tony8716 dans le forum Développement
    Réponses: 9
    Dernier message: 03/01/2008, 10h34
  4. Message d'erreur lors d'une grosse requete
    Par tony8716 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/01/2008, 10h34

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