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

Windows Forms Discussion :

[VB.Net] Utilisation des threads


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut [VB.Net] Utilisation des threads
    Bijour, alors voila avec mon ami google je cherche des explication ou un tuto sur les thread sous vb.net pour pour voir gérer mon programme durant sa boucle infini sans le gelé, alors la vous allez me dire :

    DISCUSSION DEJA DISCUTER !!! = ) oé oé c'est bien mais la fonction recherche de ce site est trop vague, ou non pire vraiment trop vague ^^

    bref si vous povez me filer un lien vers un tuto ou mieux encore ce serais cool

    Pour résumé je veux pouvoir appuyer sur un bouton de mon application pendant une boucle infini et pouvoir l'arrèter ! ? !

    merci d'avance

  2. #2
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    bah tu passe par une variable Boolean
    (initialisée a False par exemple)

    elle passe a True lorsque tu clique sur ton bouton
    et dans ta boucle infinie, tu la teste a chaque fois
    et si elle est a True
    tu fait un Exit Sub

    Non?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    oui mais mon application géle on plus plus rien faire et le Doevents permet juste de se déplacer mais je e trouve pas sa propre, c'est pour cela que j'ai besoin du thread pour une boucle infini si quelqu'un a un exemple ?

  4. #4
    Membre expérimenté Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Points : 1 455
    Points
    1 455
    Par défaut
    ah ok ...
    bah la je suis pas très calé dans ce genre de choses * notamment les thread*

    dsl,

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    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
    private _stop as boolean
     
    private sub une_sub
      dim t as new system.threading.thread(adressof masub)
      t.isbackground = true 
      t.start
    end sub
     
    private sub masub
      while _stop = false
         'traitement
         system.threading.thread.sleep(100) ' permet de pas bouffer trop de ressources si les choses à faire ne sont pas totalement continues
      end while
    end sub
     
    private sub buttonclick handles boutonarret.click
      _stop = true
    end sub
    isbackground à true permet qu'en cas d'arret du thread créateur, ce thread sera interrompu (sinon l'appli reste dans le gestionnaire des taches car encore en cours)


    NB : depuis un thread autre que le principal, il est interdit de modifier l'interface graphique, pour ca il faut utiliser des délégués
    (ou voir le backgroundworker qui encapsule tout ce qu'il faut pour faire du multithreading simple)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    OK merci beacoup sa ma l'air compréhensible

    jva tester sa et vous dire si sa fonctionne, et oui j'ai vaguement entendu parler du backgroudworker, sa peut aider aussi ^^

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    j'ai encore des problèmes de freeze avec ton code :

    Private _stop As Boolean

    Private Sub une_sub()
    Dim t As New System.Threading.Thread(AddressOf masub)
    t.isbackground = True
    t.start()
    End Sub

    Private Sub masub()
    While _stop = False


    My.Computer.Keyboard.SendKeys("F1") 'Simuler la pression sur la touche F1

    System.Threading.Thread.Sleep(100) ' permet de pas bouffer trop de ressources si les choses à faire ne sont pas totalement continues
    End While
    End Sub

    Private Sub buttonclick() Handles boutonarret.click
    _stop = True
    End Sub
    le simulation de l'appui sur le bouton géle le prog !

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    fait voir ton code réel

    et puis si c'est pour faire F1 retire la boucle infinie sinon tu envoies des millions d'appuie F1 à la seconde
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    je pige pas comment répété mon apui sur F1 si j'ai plus de boucle infini

    et j'ai remplacé mon code "réel" par le tien , cela revenait au même , mais en mieux ^^

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    sauf que les noms des sub sont pas cool et qu'on voit pas l'appel du démarrage du thread

    qu'est-ce que tu veux faire avec la touche F1 ?
    parce qu'un sendkeys dans une boucle avec un sleep de 100ms fait c'est comme si tu appuyais 10x sur F1 par seconde ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    l'appel de une_sub se fait plus haut dans un bouton click .


    En vrai je voudrais que la touche F1 soit appuzer une fois toute les 5 secondes et tout le temps jusqua l'apui d'un bouton Stop ! et voila

    mais sa freeeeeeze !

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    chez moi ca freeze pas (testé avec sleep de 5000)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    j'ai encore quelque problèmes de freeze moi mais de plus je suis tombé sur
    une erreur que je sentait venir :

    on ne peux pas utiliser

    My.Computer.Keyboard.SendKeys("F1") dans le thread

    comment faire ?


    sinon esceque c'est correct ?

    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
    Imports System.Runtime.InteropServices
    Public Class Form1
     
        Public Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
     
        End Function
     
        Dim X As String
        <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
       Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
        End Function
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            une_sub()
        End Sub
     
       'méthode a ignorer sa sert a afficher une executable dans ma form lors d'un clic
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim p As Process
            p = Process.Start("C:\monapplication.exe")
            p.WaitForInputIdle()
            SetParent(p.MainWindowHandle, Me.Handle)
            SetWindowPos(p.MainWindowHandle, IntPtr.Zero, 0, 0, 0, 0, 0)
        End Sub
     
     
        Private _stop As Boolean
     
        Private Sub une_sub()
            Dim t As New System.Threading.Thread(AddressOf masub)
            t.isbackground = True
            t.start()
        End Sub
     
        Private Sub masub()
            While _stop = False
                F1sub() ' j'ai essayer sa mai il aime pas le visual^^
                System.Threading.Thread.Sleep(5000) ' permet de pas bouffer trop de ressources si les choses à faire ne sont pas totalement continues
            End While
        End Sub
     
        Private Sub buttonclick() Handles boutonarret.Click
            _stop = True
        End Sub
     
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            masub()
        End Sub
        Public Sub F1sub()
            My.Computer.Keyboard.SendKeys("F1") 'Simuler la pression sur la touche F1
        End Sub
     
     
     
    End Class

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 97
    Points : 85
    Points
    85
    Par défaut
    nan c'est bon je suis passé par un timer c'est plus simple :

    bouton1 --> declenche le timer

    méthode X --> dés que le timer est fini on apelle la simmulation du clavier F1
    puis on rédémarre le timer.

    bouton 2 --> stop le timer


    sa marche du tonnerre !

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

Discussions similaires

  1. [VB.NET]Utilisation des UserControl
    Par guu dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/12/2006, 08h54
  2. Utilisation des threads
    Par Valinor dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2005, 16h41
  3. Utilisations des Threads
    Par phoenix440 dans le forum Réseau
    Réponses: 15
    Dernier message: 21/08/2005, 17h19
  4. [VB.NET] Utilisation des sessions dans Session_End ?
    Par San Soussy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/02/2005, 16h40

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