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 :

fenetre mdi et threads


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut fenetre mdi et threads
    Bonjour,
    je développe une application en vb.net 2010 qui permet la lecture de 21 pointeuses. J'ai une fenetre mdi parent "mdiprincipal". A l'ouverture du "mdiPrincipal", 21 fenetre filles mdi s'ouvrent (ces fenetres sont des instances du fenetre "Form1"). Dans "MDIPrincipal", il y a un bouton "ToolStripBtnDemarreTout" qui permet la lecture des 21 pointeuses simultanément.
    Dans "Form1", j'ai fait une procédure pour la lecture des pointeuses "read_pointeuse()".
    Mon problème : lors du clic sur "ToolStripBtnDemarreTout", "MDIPrincipal" se plante et le temps d'exécution est très lent.
    J'ai lu plusieurs tutoriels sur les threads mais j'ai pas trouvé encore une solution.
    voici le code:
    Dans MDIPrincipal :
    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
     
    ' Declaration des instances de Form1
    Dim frmP1, frmP2, frmP3, frmP4, frmP5, frmP6, frmP7, frmP8, frmP9, frmP10, frmP11, _
            frmP12, frmP13, frmP14, frmP15, frmP16, frmP17, frmP18, frmP19, frmP20, frmP21 As New Form1
     
       Private Sub ToolStripBtnDemarreTout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripBtnDemarreTout.Click
            frmP1.pause = False   'pause : variable dans Form1
            DelegateReadP1.BeginInvoke(Nothing, Nothing)
            frmP2.pause = False
            DelegateReadP2.BeginInvoke(Nothing, Nothing)
            '................
            frmP21.pause = False
            DelegateReadP21.BeginInvoke(Nothing, Nothing)
        End Sub
     
    'Declaration
        Public Delegate Sub typeDelegateReadPointeuse()
        Public DelegateReadP1 As New typeDelegateReadPointeuse(AddressOf frmP1.read_pointeuse)
        Public DelegateReadP2 As New typeDelegateReadPointeuse(AddressOf frmP2.read_pointeuse)
        '.............
        Public DelegateReadP21 As New typeDelegateReadPointeuse(AddressOf frmP21.read_pointeuse)
    Dans Form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Public Sub read_pointeuse()
         ' l'execution de ce code est tres lente 
         ' connexion aux pointeuses et lecture 
         ' il y a acces aux objets de l'interface du "Form1" 
         ' exemple: 
          LblEtat.Text = "Err.Lecture"
     
        End Sub
    Merci.

  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 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 thread,delegate,mise à jour UI
    Bonjour
    pour la maj de l'UI qui n'est pas traite par le BackGroundWorker regarde ce post http://www.developpez.net/forums/d10...thread/http://
    bon code.......

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,
    J'ai utilisé backgroundworker mais il m'affiche ce message :
    The CLR has been unable to transition from COM context 0x1b7b48 to COM context 0x1b7cb8 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.
    Je sais que mon programme lit 21 pointeuses en même temps. J'ai essayé de lire une seule mais le temps d'exécution est encore très long au niveau de ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CZKEM1.ReadGeneralLogData(vMachineNumber) Then
    Je crois que cette instruction permet de mettre tous les enregistrements de la pointeuse en mémoire, donc avez vous des solutions pour diminuer la charge sur la mémoire.
    Merci.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,
    J'ai fait une modification sur mon code:
    Dans MDIPrincipal:
    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
        Dim frmP1, frmP2, frmP3, frmP4, frmP5, frmP6, frmP7, frmP8, frmP9, frmP10, frmP11, _
            frmP12, frmP13, frmP14, frmP15, frmP16, frmP17, frmP18, frmP19, frmP20, frmP21 As New Form1
         Private Sub MDIPrincipal_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            frmP1.Show()
            '...........
            frmP21.Show()
            Me.LayoutMdi(MdiLayout.TileHorizontal)
        End Sub
     
        Private Sub ToolStripBtnDemarreTout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripBtnDemarreTout.Click
           frmP1.pause = False
            ' ............
            frmP21.pause = False
     
            frmP1.BGWorker.RunWorkerAsync()
            ' ..........
            frmP21.BGWorker.RunWorkerAsync()
        End Sub
    Dans Form1 (MDIFille):
    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
        Public Sub read_pointeuse()
                    If CZKEM1.Connect_Net(myip, 4370) Then
                        If CZKEM1.ReadGeneralLogData(r_point) Then
                            While CZKEM1.GetGeneralLogDataStr(r_point, dwEnrollNumber, dwVerifyMode, dwInOutMode, timeStr)
                                Application.DoEvents()
                                'code
                                Console.WriteLine(r_point & " ... " & dwEnrollNumber & " ... " & dwVerifyMode & " ... " & dwInOutMode & " ... " & date1)
                            End While
                        End If
                    End If
        End Sub
     
        Private Sub BGWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGWorker.DoWork
            read_pointeuse()
        End Sub
    ça marche bien mais se plante au niveau de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        If CZKEM1.ReadGeneralLogData(r_point) Then
    et je ne peux pas donc accéder à ma fenetre mdiPrincipal que lors de l'affichage (Apres plusieurs minutes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Console.WriteLine(r_point & " ... " & dwEnrollNumber & " ... " & dwVerifyMode & " ... " & dwInOutMode & " ... " & date1)

  6. #6
    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
    ce n'est pas évident de t'aider avec ce code qui ne montre rien

    depuis le dowork tu ne peux pas accéder aux controles

    utilises tu des dll non .net ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [c#][VS 2005] fenetres MDI
    Par Sodangbe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/04/2006, 10h59
  2. [VB.NET]une seule instance par fenetre MDI
    Par pat59 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/02/2006, 11h14
  3. Fenetre modale | Des threads en javascript ?
    Par siddh dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/11/2005, 12h06
  4. fenetre MDI - problème d'allocation
    Par say dans le forum C++Builder
    Réponses: 8
    Dernier message: 03/11/2005, 17h06
  5. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 07h58

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